failure ILLEGAL_ARGUMENT "Illegal argument in call",
};
-// errors generated by devif
-errors ahcid DEV_ERR_ {
- failure NOT_INITIALIZED "Queue exists but could not be initialized.",
- failure NOT_FOUND "Invalid queue requested, not found?",
- failure ALREADY_CREATED "The queue specified has already been created.",
- failure REGISTER_BUFFER "Unable to register the buffer with the driver.",
- failure INVALID_BUFFER_ARGS "Invalid arguments for specified buffer.",
- failure QUEUE_EMPTY "Nothing to dequeue.",
- failure QUEUE_FULL "The queue is full.",
-};
-
errors sata SATA_ERR_ {
failure INVALID_TYPE "Unknown FIS type or invalid/unimplemented field for type",
};
failure BUFFER_NOT_IN_REGION "The buffer id is not in this region",
failure BUFFER_ALREADY_IN_USE "The buffer is already in use",
failure BUFFER_NOT_IN_USE "The buffer not in use",
+ failure INVALID_BUFFER_ARGS "Invalid arguments for specified buffer.",
failure INVALID_REGION_ID "The region id is not valid",
failure REGION_DESTROY "The region has still buffers that are in use",
- failure REGION_INVALID "Invalid arguments for region",
- failure TX_FULL "Send queue full",
- failure RX_EMPTY "Receive queue emtpy",
+ failure INVALID_REGION_ARGS "Invalid arguments for region",
+ failure REGISTER_REGION "Unable to register region with queue",
+ failure QUEUE_EMPTY "Nothing to dequeue.",
+ failure QUEUE_FULL "The queue is full.",
failure DESCQ_INIT "Failure in descriptor queue init",
};
}
}
- return DEV_ERR_QUEUE_FULL;
+ return DEVQ_ERR_QUEUE_FULL;
}
static errval_t get_port(struct ahci_disk* hba, size_t port_num, struct ahci_port** p) {
struct ahci_port* port = &hba->ports[port_num];
if (!port->is_initialized) {
- return err_push(err, DEV_ERR_NOT_INITIALIZED);
+ return err_push(err, DEVQ_ERR_INIT_QUEUE);
}
*p = port;
struct dma_mem* mem = &queue->buffers[(region_id % MAX_BUFFERS)];
if (!slice_is_in_range(mem, offset, length)) {
- return DEV_ERR_INVALID_BUFFER_ARGS;
+ return DEVQ_ERR_INVALID_BUFFER_ARGS;
}
size_t slot = 0;
}
}
- return DEV_ERR_QUEUE_EMPTY;
+ return DEVQ_ERR_QUEUE_EMPTY;
}
static errval_t ahci_register(struct devq *q,
regionid_t region_id)
{
- errval_t err = DEV_ERR_REGISTER_BUFFER;
+ errval_t err = DEVQ_ERR_REGISTER_REGION;
assert(!capref_is_null(cap));
struct ahci_queue *queue = (struct ahci_queue*) q;
err = dma_mem_from_capref(cap, mem);
if (err_is_fail(err)) {
DEBUG_ERR(err, "call failed");
- return err_push(err, DEV_ERR_REGISTER_BUFFER);
+ return err_push(err, DEVQ_ERR_REGISTER_REGION);
}
return SYS_ERR_OK;
}
struct descq* q = (struct descq*) queue;
size_t head = q->tx_seq % q->slots;
if ((q->tx_seq - q->tx_seq_ack->value) > (q->slots-1)) {
- return DEVQ_ERR_TX_FULL;
+ return DEVQ_ERR_QUEUE_FULL;
}
q->tx_descs[head].rid = region_id;
uint64_t seq = q->rx_descs[q->rx_seq % q->slots].seq;
if (!(q->rx_seq == seq)) {
- return DEVQ_ERR_RX_EMPTY;
+ return DEVQ_ERR_QUEUE_EMPTY;
}
size_t tail = q->rx_seq % q->slots;
if (!e10k_queue_get_rxbuf(que, rid, offset, length, valid_data,
valid_length, flags, &last)) {
- err = DEVQ_ERR_RX_EMPTY;
+ err = DEVQ_ERR_QUEUE_EMPTY;
} else {
return SYS_ERR_OK;
}
if (!e10k_queue_get_txbuf(que, rid, offset, length, valid_data,
valid_length, flags)) {
- err = DEVQ_ERR_RX_EMPTY;
+ err = DEVQ_ERR_QUEUE_EMPTY;
} else {
return SYS_ERR_OK;
}
struct region_entry* cur = queue->regions;
if (cur == NULL) {
- return SFN_ERR_DEREGISTER_REGION;
+ return DEVQ_ERR_INVALID_REGION_ARGS;
}
while (cur->next != NULL && cur->rid != rid) {
if (sfn5122f_queue_free_rxslots(q) == 0) {
printf("SFN5122F_%d: Not enough space in RX ring, not adding buffer\n",
q->id);
- return SFN_ERR_ENQUEUE;
+ return DEVQ_ERR_QUEUE_FULL;
}
// find region
}
if (entry == NULL) {
- return SFN_ERR_ENQUEUE;
+ return DEVQ_ERR_INVALID_REGION_ARGS;
}
// compute buffer table entry of the rx buffer and the within it offset
if (sfn5122f_queue_free_txslots(q) == 0) {
printf("SFN5122F_%d: Not enough space in TX ring, not adding buffer\n",
q->id);
- return SFN_ERR_ENQUEUE;
+ return DEVQ_ERR_QUEUE_FULL;
}
// find region
}
if (entry == NULL) {
- return SFN_ERR_ENQUEUE;
+ return DEVQ_ERR_INVALID_REGION_ARGS;
}
// compute buffer table entry of the rx buffer and the within it offset
genoffset_t* valid_length, uint64_t* flags)
{
uint8_t ev_code;
- errval_t err = DEVQ_ERR_RX_EMPTY;
+ errval_t err = DEVQ_ERR_QUEUE_EMPTY;
struct sfn5122f_queue* queue = (struct sfn5122f_queue*) q;
total_size = sizeof(uint64_t)*(TX_ENTRIES + RX_ENTRIES + EV_ENTRIES);
tx_virt = alloc_map_frame(VREGION_FLAGS_READ_WRITE, total_size, &frame);
if (tx_virt == NULL) {
- return SFN_ERR_ALLOC_QUEUE;
+ return DEVQ_ERR_INIT_QUEUE;
}
rx_virt = tx_virt + (sizeof(uint64_t) *TX_ENTRIES);
// check if the buffer to enqueue is valid
if (!region_pool_buffer_check_bounds(q->pool, region_id, offset,
length, valid_data, valid_length)) {
- return DEV_ERR_INVALID_BUFFER_ARGS;
+ return DEVQ_ERR_INVALID_BUFFER_ARGS;
}
// check if the dequeue buffer is valid
if (!region_pool_buffer_check_bounds(q->pool, *region_id, *offset,
*length, *valid_data, *valid_length)) {
- return DEV_ERR_INVALID_BUFFER_ARGS;
+ return DEVQ_ERR_INVALID_BUFFER_ARGS;
}
DQI_DEBUG("Dequeue q=%p rid=%d, bid=%d \n", q, *region_id, *buffer_id);
// check if region is already registered
if (tmp->base_addr == id.base) {
- return DEVQ_ERR_REGION_INVALID;
+ return DEVQ_ERR_INVALID_REGION_ARGS;
}
/* if region if entierly before other region or
*/
if (!((id.base + id.bytes <= tmp->base_addr) ||
(tmp->base_addr + tmp->len <= id.base))) {
- return DEVQ_ERR_REGION_INVALID;
+ return DEVQ_ERR_INVALID_REGION_ARGS;
}
}
if (err_is_ok(err)) {
break;
}
- if (err_is_fail(err) && err_no(err) != DEV_ERR_QUEUE_EMPTY) {
+ if (err_is_fail(err) && err_no(err) != DEVQ_ERR_QUEUE_EMPTY) {
USER_PANIC_ERR(err, "devq dequeue");
}
wait_for_interrupt();
- } while (err_no(err) == DEV_ERR_QUEUE_EMPTY);
+ } while (err_no(err) == DEVQ_ERR_QUEUE_EMPTY);
assert (offset == 0);
assert (length == 512);
if (err_is_ok(err)) {
break;
}
- if (err_is_fail(err) && err_no(err) != DEV_ERR_QUEUE_EMPTY) {
+ if (err_is_fail(err) && err_no(err) != DEVQ_ERR_QUEUE_EMPTY) {
USER_PANIC_ERR(err, "devq dequeue");
}
- assert(err_no(err) == DEV_ERR_QUEUE_EMPTY);
+ assert(err_no(err) == DEVQ_ERR_QUEUE_EMPTY);
wait_for_interrupt();
- } while (err_no(err) == DEV_ERR_QUEUE_EMPTY);
+ } while (err_no(err) == DEVQ_ERR_QUEUE_EMPTY);
}
static void receive_block(void)
if (err_is_ok(err)) {
break;
}
- else if (err_no(err) == DEV_ERR_QUEUE_FULL) {
+ else if (err_no(err) == DEVQ_ERR_QUEUE_FULL) {
receive_block();
}
else {
if (err_is_ok(err)) {
break;
}
- else if (err_no(err) == DEV_ERR_QUEUE_FULL) {
+ else if (err_no(err) == DEVQ_ERR_QUEUE_FULL) {
receive_block();
}
else {
if (err_is_ok(err)) {
break;
}
- else if (err_no(err) == DEV_ERR_QUEUE_FULL) {
+ else if (err_no(err) == DEVQ_ERR_QUEUE_FULL) {
receive_block();
}
else {