static struct sk_buff * cxgbit_ppod_init_idata(struct cxgbit_device *cdev, struct cxgbi_ppm *ppm, unsigned int idx, unsigned int npods, unsigned int tid) { struct ulp_mem_io *req; struct ulptx_idata *idata; unsigned int pm_addr = (idx << PPOD_SIZE_SHIFT) + ppm->llimit; unsigned int dlen = npods << PPOD_SIZE_SHIFT; unsigned int wr_len = roundup(sizeof(struct ulp_mem_io) + sizeof(struct ulptx_idata) + dlen, 16); struct sk_buff *skb; skb = alloc_skb(wr_len, GFP_KERNEL); if (!skb) return NULL; req = __skb_put(skb, wr_len); INIT_ULPTX_WR(req, wr_len, 0, tid); req->wr.wr_hi = htonl(FW_WR_OP_V(FW_ULPTX_WR) | FW_WR_ATOMIC_V(0)); req->cmd = htonl(ULPTX_CMD_V(ULP_TX_MEM_WRITE) | ULP_MEMIO_ORDER_V(0) | T5_ULP_MEMIO_IMM_V(1)); req->dlen = htonl(ULP_MEMIO_DATA_LEN_V(dlen >> 5)); req->lock_addr = htonl(ULP_MEMIO_ADDR_V(pm_addr >> 5)); req->len16 = htonl(DIV_ROUND_UP(wr_len - sizeof(req->wr), 16)); idata = (struct ulptx_idata *)(req + 1); idata->cmd_more = htonl(ULPTX_CMD_V(ULP_TX_SC_IMM)); idata->len = htonl(dlen); return skb; }
static void mk_abort_req_ulp(struct cpl_abort_req *abort_req, unsigned int tid) { struct ulp_txpkt *txpkt = (struct ulp_txpkt *)abort_req; struct ulptx_idata *sc = (struct ulptx_idata *)(txpkt + 1); txpkt->cmd_dest = htonl(ULPTX_CMD_V(ULP_TX_PKT) | ULP_TXPKT_DEST_V(0)); txpkt->len = htonl(DIV_ROUND_UP(sizeof(*abort_req), 16)); sc->cmd_more = htonl(ULPTX_CMD_V(ULP_TX_SC_IMM)); sc->len = htonl(sizeof(*abort_req) - sizeof(struct work_request_hdr)); OPCODE_TID(abort_req) = htonl(MK_OPCODE_TID(CPL_ABORT_REQ, tid)); abort_req->rsvd0 = htonl(0); abort_req->rsvd1 = 0; abort_req->cmd = CPL_ABORT_NO_RST; }
static void mk_set_tcb_ulp(struct filter_entry *f, struct cpl_set_tcb_field *req, unsigned int word, u64 mask, u64 val, u8 cookie, int no_reply) { struct ulp_txpkt *txpkt = (struct ulp_txpkt *)req; struct ulptx_idata *sc = (struct ulptx_idata *)(txpkt + 1); txpkt->cmd_dest = htonl(ULPTX_CMD_V(ULP_TX_PKT) | ULP_TXPKT_DEST_V(0)); txpkt->len = htonl(DIV_ROUND_UP(sizeof(*req), 16)); sc->cmd_more = htonl(ULPTX_CMD_V(ULP_TX_SC_IMM)); sc->len = htonl(sizeof(*req) - sizeof(struct work_request_hdr)); OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, f->tid)); req->reply_ctrl = htons(NO_REPLY_V(no_reply) | REPLY_CHAN_V(0) | QUEUENO_V(0)); req->word_cookie = htons(TCB_WORD_V(word) | TCB_COOKIE_V(cookie)); req->mask = cpu_to_be64(mask); req->val = cpu_to_be64(val); sc = (struct ulptx_idata *)(req + 1); sc->cmd_more = htonl(ULPTX_CMD_V(ULP_TX_SC_NOOP)); sc->len = htonl(0); }