[Denali] Move denali server to yunq.
This commit is contained in:
parent
acfaf26391
commit
3e4fdfee84
25 changed files with 526 additions and 163 deletions
|
|
@ -12,45 +12,22 @@ glcr::ErrorOr<glcr::UniquePtr<DenaliServer>> DenaliServer::Create(
|
|||
return glcr::UniquePtr<DenaliServer>(new DenaliServer(cap, driver));
|
||||
}
|
||||
|
||||
glcr::ErrorCode DenaliServer::HandleRequest(RequestContext& request,
|
||||
ResponseContext& response) {
|
||||
switch (request.request_id()) {
|
||||
case DENALI_READ: {
|
||||
DenaliReadRequest* req = 0;
|
||||
glcr::ErrorCode err = request.As<DenaliReadRequest>(&req);
|
||||
if (err != glcr::OK) {
|
||||
response.WriteError(err);
|
||||
}
|
||||
err = HandleRead(req, response);
|
||||
if (err != glcr::OK) {
|
||||
response.WriteError(err);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
response.WriteError(glcr::UNIMPLEMENTED);
|
||||
break;
|
||||
}
|
||||
return glcr::OK;
|
||||
}
|
||||
|
||||
glcr::ErrorCode DenaliServer::HandleRead(DenaliReadRequest* request,
|
||||
ResponseContext& context) {
|
||||
ASSIGN_OR_RETURN(AhciDevice * device, driver_.GetDevice(request->device_id));
|
||||
glcr::ErrorCode DenaliServer::HandleRead(const ReadRequest& req,
|
||||
ReadResponse& resp) {
|
||||
ASSIGN_OR_RETURN(AhciDevice * device, driver_.GetDevice(req.device_id()));
|
||||
ASSIGN_OR_RETURN(Mutex mutex, Mutex::Create());
|
||||
RET_ERR(mutex.Lock());
|
||||
|
||||
DmaReadCommand command(request->lba, request->size, mutex, context);
|
||||
DmaReadCommand command(req.lba(), req.size(), mutex);
|
||||
device->IssueCommand(&command);
|
||||
|
||||
// Wait for read operation to complete.
|
||||
RET_ERR(mutex.Lock());
|
||||
RET_ERR(mutex.Release());
|
||||
DenaliReadResponse resp{
|
||||
.device_id = request->device_id,
|
||||
.lba = request->lba,
|
||||
.size = request->size,
|
||||
};
|
||||
return context.WriteStructWithCap<DenaliReadResponse>(
|
||||
resp, command.GetMemoryRegion());
|
||||
|
||||
resp.set_device_id(req.device_id());
|
||||
resp.set_lba(req.lba());
|
||||
resp.set_size(req.size());
|
||||
resp.set_memory(command.GetMemoryRegion());
|
||||
return glcr::OK;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue