buf_desc
struct psp_gfx_buf_desc buf_desc[GFX_BUF_MAX_DESC]; /* list of buffer descriptors */
struct g2d_buf_desc *buf_desc;
buf_desc = &buf_info->descs[reg_type];
buf_desc->stride = cmdlist->data[index + 1];
buf_desc = &buf_info->descs[reg_type];
buf_desc->format = value & 0xf;
buf_desc = &buf_info->descs[reg_type];
buf_desc->left_x = value & 0x1fff;
buf_desc->top_y = (value & 0x1fff0000) >> 16;
buf_desc = &buf_info->descs[reg_type];
buf_desc->right_x = value & 0x1fff;
buf_desc->bottom_y = (value & 0x1fff0000) >> 16;
struct g2d_buf_desc *buf_desc,
width = (int)buf_desc->right_x - (int)buf_desc->left_x;
height = (int)buf_desc->bottom_y - (int)buf_desc->top_y;
bpp = g2d_get_buf_bpp(buf_desc->format);
last_pos = ((unsigned long)buf_desc->bottom_y - 1) *
(unsigned long)buf_desc->stride +
(unsigned long)buf_desc->right_x * bpp - 1;
struct g2d_buf_desc *buf_desc;
buf_desc = &buf_info->descs[reg_type];
if (!g2d_check_buf_desc_is_valid(g2d, buf_desc,
if (!g2d_check_buf_desc_is_valid(g2d, buf_desc,
struct g2d_buf_desc *buf_desc;
buf_desc = &buf_info->descs[reg_type];
memset(buf_desc, 0x00, sizeof(*buf_desc));
struct bcm4908_enet_dma_ring_bd *buf_desc = &enet->rx_ring.buf_desc[idx];
buf_desc->ctl = cpu_to_le32(tmp);
buf_desc->addr = cpu_to_le32(slot->dma_addr);
struct bcm4908_enet_dma_ring_bd *buf_desc;
!(le32_to_cpu(ring->buf_desc[ring->read_idx].ctl) & DMA_CTL_STATUS_OWN))
buf_desc = &ring->buf_desc[ring->write_idx];
if (unlikely(le32_to_cpu(buf_desc->ctl) & DMA_CTL_STATUS_OWN)) {
buf_desc->addr = cpu_to_le32((uint32_t)slot->dma_addr);
buf_desc->ctl = cpu_to_le32(tmp);
struct bcm4908_enet_dma_ring_bd *buf_desc;
buf_desc = &enet->rx_ring.buf_desc[enet->rx_ring.read_idx];
ctl = le32_to_cpu(buf_desc->ctl);
struct bcm4908_enet_dma_ring_bd *buf_desc;
buf_desc = &tx_ring->buf_desc[tx_ring->read_idx];
if (le32_to_cpu(buf_desc->ctl) & DMA_CTL_STATUS_OWN)
struct bcm4908_enet_dma_ring_bd *buf_desc;
hinic_set_sge(&wqe_lcmd->buf_desc.sge, buf_in->dma_addr, buf_in->size);
wqe_scmd->buf_desc.buf_len = in_size;
memcpy(wqe_scmd->buf_desc.data, buf_in, in_size);
sge->hi_addr = be32_to_cpu(rq_wqe->buf_desc.hi_addr);
sge->lo_addr = be32_to_cpu(rq_wqe->buf_desc.lo_addr);
struct hinic_rq_bufdesc *buf_desc = &rq_wqe->buf_desc;
HINIC_RQ_CTRL_SET(SIZE_8BYTES(sizeof(*buf_desc)),
buf_desc->hi_addr = sge->hi_addr;
buf_desc->lo_addr = sge->lo_addr;
struct hinic_scmd_bufdesc buf_desc;
struct hinic_lcmd_bufdesc buf_desc;
struct hinic_rq_bufdesc buf_desc;
hinic3_set_sge(&wqe->buf_desc.sge, buf_in->dma_addr,
struct cmdq_lcmd_bufdesc buf_desc;
buf_desc = wqe_combo->bds_sec2;
hinic3_set_buf_desc(buf_desc, dma_info[idx].dma,
buf_desc++;
struct hinic3_sq_bufdesc *buf_desc = wqe_combo->bds_head;
struct virtchnl2_splitq_rx_buf_desc *buf_desc)
buf_desc->pkt_addr = cpu_to_le64(addr);
buf_desc->qword0.buf_id = cpu_to_le16(buf_id);
buf_desc->hdr_addr = cpu_to_le64(addr);
struct virtchnl2_splitq_rx_buf_desc *buf_desc;
buf_desc = &bufq->split_buf[bufq_nta];
failure = idpf_rx_update_bufq_desc(bufq, buf_id, buf_desc);
buf_desc = &bufq->split_buf[0];
buf_desc++;
ef4_qword_t buf_desc;
EF4_POPULATE_QWORD_3(buf_desc,
ef4_write_buf_tbl(efx, &buf_desc, index);
efx_qword_t buf_desc;
EFX_POPULATE_QWORD_3(buf_desc,
efx_write_buf_tbl(efx, &buf_desc, index);
struct rtw_pci_rx_buffer_desc *buf_desc;
buf_desc = (struct rtw_pci_rx_buffer_desc *)(rx_ring->r.head +
memset(buf_desc, 0, sizeof(*buf_desc));
buf_desc->buf_size = cpu_to_le16(RTK_PCI_RX_BUF_SIZE);
buf_desc->dma = cpu_to_le32(dma);
struct rtw_pci_rx_buffer_desc *buf_desc;
buf_desc = (struct rtw_pci_rx_buffer_desc *)(rx_ring->r.head +
memset(buf_desc, 0, sizeof(*buf_desc));
buf_desc->buf_size = cpu_to_le16(RTK_PCI_RX_BUF_SIZE);
buf_desc->dma = cpu_to_le32(dma);
struct rtw_pci_rx_buffer_desc *buf_desc;
buf_desc = (struct rtw_pci_rx_buffer_desc *)(rx_ring->r.head +
total_pkt_size = le16_to_cpu(buf_desc->total_pkt_size);
struct rtw_pci_tx_buffer_desc *buf_desc;
buf_desc = get_tx_buffer_desc(ring, tx_buf_desc_sz);
memset(buf_desc, 0, tx_buf_desc_sz);
buf_desc[0].psb_len = cpu_to_le16(psb_len);
buf_desc[0].buf_size = cpu_to_le16(tx_pkt_desc_sz);
buf_desc[0].dma = cpu_to_le32(dma);
buf_desc[1].buf_size = cpu_to_le16(size);
buf_desc[1].dma = cpu_to_le32(dma + tx_pkt_desc_sz);
u8 *buf_desc;
buf_desc = ring->r.head + ring->r.wp * size;
return (struct rtw_pci_tx_buffer_desc *)buf_desc;
struct buf_desc *bd;
struct buf_desc *bd;
struct buf_desc *bd;
bd = (struct buf_desc *)sqi->bd;
sizeof(struct buf_desc) * PESQI_BD_COUNT,
static void smcr_buf_unuse(struct smc_buf_desc *buf_desc, bool is_rmb,
if (is_rmb && buf_desc->is_conf_rkey && !list_empty(&lgr->list)) {
smc_llc_do_delete_rkey(lgr, buf_desc);
buf_desc->is_conf_rkey = false;
if (buf_desc->is_reg_err) {
smc_lgr_buf_list_del(lgr, is_rmb, buf_desc);
smc_buf_free(lgr, is_rmb, buf_desc);
memzero_explicit(buf_desc->cpu_addr, buf_desc->len);
WRITE_ONCE(buf_desc->used, 0);
static void smcr_buf_unmap_link(struct smc_buf_desc *buf_desc, bool is_rmb,
if (is_rmb || buf_desc->is_vm)
buf_desc->is_reg_mr[lnk->link_idx] = false;
if (!buf_desc->is_map_ib[lnk->link_idx])
if ((is_rmb || buf_desc->is_vm) &&
buf_desc->mr[lnk->link_idx]) {
smc_ib_put_memory_region(buf_desc->mr[lnk->link_idx]);
buf_desc->mr[lnk->link_idx] = NULL;
smc_ib_buf_unmap_sg(lnk, buf_desc, DMA_FROM_DEVICE);
smc_ib_buf_unmap_sg(lnk, buf_desc, DMA_TO_DEVICE);
sg_free_table(&buf_desc->sgt[lnk->link_idx]);
buf_desc->is_map_ib[lnk->link_idx] = false;
struct smc_buf_desc *buf_desc, *bf;
list_for_each_entry_safe(buf_desc, bf, &lgr->rmbs[i], list)
smcr_buf_unmap_link(buf_desc, true, lnk);
list_for_each_entry_safe(buf_desc, bf, &lgr->sndbufs[i],
smcr_buf_unmap_link(buf_desc, false, lnk);
struct smc_buf_desc *buf_desc)
smcr_buf_unmap_link(buf_desc, is_rmb, &lgr->lnk[i]);
if (!buf_desc->is_vm && buf_desc->pages)
__free_pages(buf_desc->pages, buf_desc->order);
else if (buf_desc->is_vm && buf_desc->cpu_addr)
vfree(buf_desc->cpu_addr);
kfree(buf_desc);
struct smc_buf_desc *buf_desc)
buf_desc->len += sizeof(struct smcd_cdc_msg);
smc_ism_unregister_dmb(lgr->smcd, buf_desc);
kfree(buf_desc->cpu_addr);
kfree(buf_desc);
struct smc_buf_desc *buf_desc)
smcd_buf_free(lgr, is_rmb, buf_desc);
smcr_buf_free(lgr, is_rmb, buf_desc);
struct smc_buf_desc *buf_desc, *bf_desc;
list_for_each_entry_safe(buf_desc, bf_desc, buf_list,
smc_lgr_buf_list_del(lgr, is_rmb, buf_desc);
smc_buf_free(lgr, is_rmb, buf_desc);
static int smcr_buf_map_link(struct smc_buf_desc *buf_desc, bool is_rmb,
if (buf_desc->is_map_ib[lnk->link_idx])
if (buf_desc->is_vm) {
buf = buf_desc->cpu_addr;
buf_size = buf_desc->len;
offset = offset_in_page(buf_desc->cpu_addr);
rc = sg_alloc_table(&buf_desc->sgt[lnk->link_idx], nents, GFP_KERNEL);
if (buf_desc->is_vm) {
for_each_sg(buf_desc->sgt[lnk->link_idx].sgl, sg, nents, i) {
sg_set_buf(buf_desc->sgt[lnk->link_idx].sgl,
buf_desc->cpu_addr, buf_desc->len);
rc = smc_ib_buf_map_sg(lnk, buf_desc,
buf_desc->is_dma_need_sync |=
smc_ib_is_sg_need_sync(lnk, buf_desc) << lnk->link_idx;
if (is_rmb || buf_desc->is_vm) {
buf_desc, lnk->link_idx);
smc_ib_sync_sg_for_device(lnk, buf_desc,
buf_desc->is_map_ib[lnk->link_idx] = true;
smc_ib_buf_unmap_sg(lnk, buf_desc,
sg_free_table(&buf_desc->sgt[lnk->link_idx]);
int smcr_link_reg_buf(struct smc_link *link, struct smc_buf_desc *buf_desc)
if (!buf_desc->is_reg_mr[link->link_idx]) {
if (buf_desc->is_vm)
buf_desc->mr[link->link_idx]->iova =
(uintptr_t)buf_desc->cpu_addr;
if (smc_wr_reg_send(link, buf_desc->mr[link->link_idx])) {
buf_desc->is_reg_err = true;
buf_desc->is_reg_mr[link->link_idx] = true;
struct smc_buf_desc *buf_desc, *bf;
list_for_each_entry_safe(buf_desc, bf, lst, list) {
if (!buf_desc->used)
rc = smcr_buf_map_link(buf_desc, is_rmb, lnk);
struct smc_buf_desc *buf_desc)
struct smc_buf_desc *buf_desc, *bf;
list_for_each_entry_safe(buf_desc, bf, &lgr->rmbs[i], list) {
if (!buf_desc->used)
rc = smcr_link_reg_buf(lnk, buf_desc);
list_add(&buf_desc->list, buf_list);
list_for_each_entry_safe(buf_desc, bf, &lgr->sndbufs[i], list) {
if (!buf_desc->used || !buf_desc->is_vm)
rc = smcr_link_reg_buf(lnk, buf_desc);
lgr->alloc_rmbs += buf_desc->len;
struct smc_buf_desc *buf_desc;
buf_desc = kzalloc_obj(*buf_desc);
if (!buf_desc)
buf_desc->order = get_order(bufsize);
buf_desc->pages = alloc_pages(GFP_KERNEL | __GFP_NOWARN |
buf_desc->order);
if (buf_desc->pages) {
buf_desc->cpu_addr =
(void *)page_address(buf_desc->pages);
buf_desc->len = bufsize;
buf_desc->is_vm = false;
buf_desc->order = get_order(bufsize);
buf_desc->cpu_addr = vzalloc(PAGE_SIZE << buf_desc->order);
if (!buf_desc->cpu_addr)
lgr->alloc_sndbufs += buf_desc->len;
buf_desc->pages = NULL;
buf_desc->len = bufsize;
buf_desc->is_vm = true;
return buf_desc;
kfree(buf_desc);
struct smc_buf_desc *buf_desc, bool is_rmb)
if (smcr_buf_map_link(buf_desc, is_rmb, lnk)) {
struct smc_buf_desc *buf_desc;
buf_desc = kzalloc_obj(*buf_desc);
if (!buf_desc)
rc = smc_ism_register_dmb(lgr, bufsize, buf_desc);
kfree(buf_desc);
struct smc_buf_desc *buf_desc)
buf_desc->pages = virt_to_page(buf_desc->cpu_addr);
buf_desc->len = bufsize - sizeof(struct smcd_cdc_msg);
buf_desc->cpu_addr = kzalloc(bufsize, GFP_KERNEL |
if (!buf_desc->cpu_addr) {
kfree(buf_desc);
buf_desc->len = bufsize;
return buf_desc;
struct smc_buf_desc *buf_desc = ERR_PTR(-ENOMEM);
list_del(&buf_desc->list);
lgr->alloc_rmbs -= buf_desc->len;
buf_desc = smc_buf_get_slot(lock, buf_list);
if (buf_desc) {
buf_desc->is_dma_need_sync = 0;
buf_desc = smcd_new_buf_create(lgr, is_rmb, bufsize);
buf_desc = smcr_new_buf_create(lgr, bufsize);
if (PTR_ERR(buf_desc) == -ENOMEM)
if (IS_ERR(buf_desc)) {
buf_desc->used = 1;
smc_lgr_buf_list_add(lgr, is_rmb, buf_list, buf_desc);
lgr->alloc_sndbufs -= buf_desc->len;
if (IS_ERR(buf_desc))
return PTR_ERR(buf_desc);
if (smcr_buf_map_usable_links(lgr, buf_desc, is_rmb)) {
smcr_buf_unuse(buf_desc, is_rmb, lgr);
conn->rmb_desc = buf_desc;
smc_rmb_wnd_update_limit(buf_desc->len);
conn->sndbuf_desc = buf_desc;
struct smc_buf_desc *buf_desc;
buf_desc = kzalloc_obj(*buf_desc);
if (!buf_desc)
rc = smc_ism_attach_dmb(smcd, peer_token, buf_desc);
smc->sk.sk_sndbuf = buf_desc->len;
buf_desc->cpu_addr =
(u8 *)buf_desc->cpu_addr + sizeof(struct smcd_cdc_msg);
buf_desc->len -= sizeof(struct smcd_cdc_msg);
conn->sndbuf_desc = buf_desc;
kfree(buf_desc);
struct smc_buf_desc *buf_desc);