dpaa_bp
static int dpaa_eth_init_rx_port(struct fman_port *port, struct dpaa_bp *bp,
struct dpaa_bp *bp,
static int dpaa_bman_release(const struct dpaa_bp *dpaa_bp,
err = bman_release(dpaa_bp->pool, bmb, cnt);
if (WARN_ON(err) && dpaa_bp->free_buf_cb)
dpaa_bp->free_buf_cb(dpaa_bp, &bmb[cnt]);
struct dpaa_bp *dpaa_bp;
dpaa_bp = dpaa_bpid2pool(sgt[i].bpid);
if (!dpaa_bp)
dpaa_bman_release(dpaa_bp, bmb, j);
struct dpaa_bp *dpaa_bp;
dpaa_bp = dpaa_bpid2pool(fd->bpid);
if (!dpaa_bp)
dma_unmap_page(dpaa_bp->priv->rx_dma_dev, qm_fd_addr(fd),
addr = dma_map_page(dpaa_bp->priv->rx_dma_dev,
if (dma_mapping_error(dpaa_bp->priv->rx_dma_dev, addr)) {
dpaa_bman_release(dpaa_bp, &bmb, 1);
static int dpaa_bp_add_8_bufs(const struct dpaa_bp *dpaa_bp)
struct net_device *net_dev = dpaa_bp->priv->net_dev;
addr = dma_map_page(dpaa_bp->priv->rx_dma_dev, p, 0,
if (unlikely(dma_mapping_error(dpaa_bp->priv->rx_dma_dev,
return dpaa_bman_release(dpaa_bp, bmb, i);
static int dpaa_bp_seed(struct dpaa_bp *dpaa_bp)
int *count_ptr = per_cpu_ptr(dpaa_bp->percpu_count, i);
for (j = 0; j < dpaa_bp->config_count; j += 8)
*count_ptr += dpaa_bp_add_8_bufs(dpaa_bp);
static int dpaa_eth_refill_bpool(struct dpaa_bp *dpaa_bp, int *countptr)
new_bufs = dpaa_bp_add_8_bufs(dpaa_bp);
struct dpaa_bp *dpaa_bp;
dpaa_bp = priv->dpaa_bp;
if (!dpaa_bp)
countptr = this_cpu_ptr(dpaa_bp->percpu_count);
return dpaa_eth_refill_bpool(dpaa_bp, countptr);
struct dpaa_bp *dpaa_bp;
dpaa_bp = dpaa_bpid2pool(fd->bpid);
if (!dpaa_bp)
skb = build_skb(vaddr, dpaa_bp->size +
static struct dpaa_bp *dpaa_bp_array[BM_MAX_NUM_OF_POOLS];
struct dpaa_bp *dpaa_bp;
dpaa_bp = dpaa_bpid2pool(sgt[i].bpid);
if (!dpaa_bp)
sz = dpaa_bp->size +
dpaa_bp->size);
count_ptr = this_cpu_ptr(dpaa_bp->percpu_count);
dpaa_bp = dpaa_bpid2pool(sgt[j].bpid);
if (dpaa_bp) {
count_ptr = this_cpu_ptr(dpaa_bp->percpu_count);
struct dpaa_bp *dpaa_bp;
dpaa_bp = dpaa_bpid2pool(dq->fd.bpid);
if (!dpaa_bp)
struct dpaa_bp *dpaa_bp;
dpaa_bp = dpaa_bpid2pool(dq->fd.bpid);
if (!dpaa_bp)
dma_unmap_page(dpaa_bp->priv->rx_dma_dev, addr, DPAA_BP_RAW_SIZE,
count_ptr = this_cpu_ptr(dpaa_bp->percpu_count);
int max_contig_data = priv->dpaa_bp->size - priv->rx_headroom;
static inline void dpaa_bp_free_pf(const struct dpaa_bp *bp,
static struct dpaa_bp *dpaa_bp_alloc(struct device *dev)
struct dpaa_bp *dpaa_bp;
dpaa_bp = devm_kzalloc(dev, sizeof(*dpaa_bp), GFP_KERNEL);
if (!dpaa_bp)
dpaa_bp->bpid = FSL_DPAA_BPID_INV;
dpaa_bp->percpu_count = devm_alloc_percpu(dev, *dpaa_bp->percpu_count);
if (!dpaa_bp->percpu_count)
dpaa_bp->config_count = FSL_DPAA_ETH_MAX_BUF_COUNT;
dpaa_bp->seed_cb = dpaa_bp_seed;
dpaa_bp->free_buf_cb = dpaa_bp_free_pf;
return dpaa_bp;
struct dpaa_bp *dpaa_bp = NULL;
dpaa_bp = dpaa_bp_alloc(dev);
if (IS_ERR(dpaa_bp)) {
err = PTR_ERR(dpaa_bp);
dpaa_bp->raw_size = DPAA_BP_RAW_SIZE;
dpaa_bp->size = dpaa_bp_size(dpaa_bp->raw_size);
dpaa_bp->priv = priv;
err = dpaa_bp_alloc_pool(dpaa_bp);
priv->dpaa_bp = dpaa_bp;
err = dpaa_eth_init_ports(mac_dev, dpaa_bp, &port_fqs,
static struct dpaa_bp *dpaa_bpid2pool(int bpid)
static void dpaa_bpid2pool_map(int bpid, struct dpaa_bp *dpaa_bp)
dpaa_bp_array[bpid] = dpaa_bp;
refcount_set(&dpaa_bp->refs, 1);
static int dpaa_bp_alloc_pool(struct dpaa_bp *dpaa_bp)
if (dpaa_bp->size == 0 || dpaa_bp->config_count == 0) {
if (dpaa_bp->bpid != FSL_DPAA_BPID_INV &&
dpaa_bpid2pool_use(dpaa_bp->bpid))
if (dpaa_bp->bpid == FSL_DPAA_BPID_INV) {
dpaa_bp->pool = bman_new_pool();
if (!dpaa_bp->pool) {
dpaa_bp->bpid = (u8)bman_get_bpid(dpaa_bp->pool);
if (dpaa_bp->seed_cb) {
err = dpaa_bp->seed_cb(dpaa_bp);
dpaa_bpid2pool_map(dpaa_bp->bpid, dpaa_bp);
bman_free_pool(dpaa_bp->pool);
static void dpaa_bp_drain(struct dpaa_bp *bp)
static void dpaa_bp_free(struct dpaa_bp *dpaa_bp)
struct dpaa_bp *bp = dpaa_bpid2pool(dpaa_bp->bpid);
dpaa_bp_free(priv->dpaa_bp);
struct dpaa_bp *dpaa_bp;
int (*seed_cb)(struct dpaa_bp *);
void (*free_buf_cb)(const struct dpaa_bp *, struct bm_buffer *);
priv->dpaa_bp->bpid);
struct dpaa_bp *dpaa_bp;
dpaa_bp = priv->dpaa_bp;
if (!dpaa_bp->percpu_count)
bp_count = *(per_cpu_ptr(dpaa_bp->percpu_count, i));