aob
int eadm_start_aob(struct aob *aob);
void scm_irq_handler(struct aob *aob, blk_status_t error);
unsigned int count, struct qaob *aob);
dma32_t aob;
msb = &scmrq->aob->msb[i];
int pos = scmrq->aob->request.msb_count;
struct msb *msb = &scmrq->aob->msb[pos];
scmrq->aob->request.msb_count++;
scmrq->request[scmrq->aob->request.msb_count] = req;
struct aob *aob = scmrq->aob;
memset(aob, 0, sizeof(*aob));
aob->request.cmd_code = ARQB_CMD_MOVE;
aob->request.data = (u64) aobrq;
scmrq->next_aidaw = (void *) &aob->msb[nr_requests_per_io];
if (eadm_start_aob(scmrq->aob)) {
if (scmrq->aob->request.msb_count)
if (qd->last || scmrq->aob->request.msb_count == nr_requests_per_io) {
struct aob *aob = scmrq->aob;
SCM_LOG_HEX(1, &aob->response, sizeof(aob->response));
switch (scmrq->aob->response.eqc) {
if (!eadm_start_aob(scmrq->aob))
free_page((unsigned long) scmrq->aob);
scmrq->aob = (void *) get_zeroed_page(GFP_DMA);
if (!scmrq->aob)
struct aob *aob;
scm_irq_handler(dma32_to_virt(scsw->aob), error);
int eadm_start_aob(struct aob *aob)
ret = eadm_subchannel_start(sch, aob);
static int eadm_subchannel_start(struct subchannel *sch, struct aob *aob)
orb->eadm.aob = virt_to_dma32(aob);
dma32_t aob;
struct qaob *aob)
dma64_t phys_aob = aob ? virt_to_dma64(aob) : 0;
struct qaob *aob)
return handle_outbound(irq_ptr->output_qs[q_nr], bufnr, count, aob);
unsigned int *busy_bit, dma64_t aob)
else if (aob)
cc = do_siga_output(schid, q->mask, busy_bit, fc, aob);
dma64_t aob)
cc = qdio_siga_output(q, count, &busy_bit, aob);
dma64_t aob)
: [schid] "d" (schid), [mask] "d" (mask), [aob] "d" (aob)
void scm_irq_handler(struct aob *aob, blk_status_t error)
struct aob_rq_header *aobrq = (void *) aob->request.data;
struct qaob *aob;
if (buf->aob)
kmem_cache_free(qeth_qaob_cache, buf->aob);
struct qaob *aob = buf->aob;
priv = (struct qeth_qaob_priv1 *)&aob->user1;
qeth_compute_cq_notification(aob->aorc, 1);
i < aob->sb_count && i < queue->max_elements;
void *data = dma64_to_virt(aob->sba[i]);
struct qaob *aob = NULL;
if (!buf->aob)
buf->aob = kmem_cache_zalloc(qeth_qaob_cache,
if (buf->aob) {
aob = buf->aob;
priv = (struct qeth_qaob_priv1 *)&aob->user1;
index, count, aob);
static void qeth_qdio_handle_aob(struct qeth_card *card, struct qaob *aob)
struct qeth_qaob_priv1 *priv = (struct qeth_qaob_priv1 *)&aob->user1;
BUILD_BUG_ON(sizeof(*priv) > ARRAY_SIZE(aob->user1));
struct qaob *aob = buffer->aob;
if (!aob) {
priv = (struct qeth_qaob_priv1 *)&aob->user1;
notify = qeth_compute_cq_notification(aob->aorc, 0);
error = !!aob->aorc;
memset(aob, 0, sizeof(*aob));