Lines Matching refs:hdroom
318 void mlxsw_sp_hdroom_prios_reset_buf_idx(struct mlxsw_sp_hdroom *hdroom) in mlxsw_sp_hdroom_prios_reset_buf_idx() argument
323 switch (hdroom->mode) { in mlxsw_sp_hdroom_prios_reset_buf_idx()
325 hdroom->prios.prio[prio].buf_idx = hdroom->prios.prio[prio].ets_buf_idx; in mlxsw_sp_hdroom_prios_reset_buf_idx()
328 hdroom->prios.prio[prio].buf_idx = hdroom->prios.prio[prio].set_buf_idx; in mlxsw_sp_hdroom_prios_reset_buf_idx()
334 void mlxsw_sp_hdroom_bufs_reset_lossiness(struct mlxsw_sp_hdroom *hdroom) in mlxsw_sp_hdroom_bufs_reset_lossiness() argument
340 hdroom->bufs.buf[i].lossy = true; in mlxsw_sp_hdroom_bufs_reset_lossiness()
343 if (!hdroom->prios.prio[prio].lossy) in mlxsw_sp_hdroom_bufs_reset_lossiness()
344 hdroom->bufs.buf[hdroom->prios.prio[prio].buf_idx].lossy = false; in mlxsw_sp_hdroom_bufs_reset_lossiness()
363 const struct mlxsw_sp_hdroom *hdroom) in mlxsw_sp_hdroom_buf_delay_get() argument
367 delay_cells = mlxsw_sp_bytes_cells(mlxsw_sp, hdroom->delay_bytes); in mlxsw_sp_hdroom_buf_delay_get()
377 return 2 * delay_cells + mlxsw_sp_bytes_cells(mlxsw_sp, hdroom->mtu); in mlxsw_sp_hdroom_buf_delay_get()
387 static bool mlxsw_sp_hdroom_buf_is_used(const struct mlxsw_sp_hdroom *hdroom, int buf) in mlxsw_sp_hdroom_buf_is_used() argument
392 if (hdroom->prios.prio[prio].buf_idx == buf) in mlxsw_sp_hdroom_buf_is_used()
399 struct mlxsw_sp_hdroom *hdroom) in mlxsw_sp_hdroom_bufs_reset_sizes() argument
411 hdroom->int_buf.reserve_cells = reserve_cells; in mlxsw_sp_hdroom_bufs_reset_sizes()
413 if (hdroom->int_buf.enable) in mlxsw_sp_hdroom_bufs_reset_sizes()
414 hdroom->int_buf.size_cells = reserve_cells; in mlxsw_sp_hdroom_bufs_reset_sizes()
416 hdroom->int_buf.size_cells = 0; in mlxsw_sp_hdroom_bufs_reset_sizes()
420 struct mlxsw_sp_hdroom_buf *buf = &hdroom->bufs.buf[i]; in mlxsw_sp_hdroom_bufs_reset_sizes()
424 if (!mlxsw_sp_hdroom_buf_is_used(hdroom, i)) { in mlxsw_sp_hdroom_bufs_reset_sizes()
428 thres_cells = mlxsw_sp_hdroom_buf_threshold_get(mlxsw_sp, hdroom->mtu); in mlxsw_sp_hdroom_bufs_reset_sizes()
431 thres_cells = mlxsw_sp_hdroom_buf_threshold_get(mlxsw_sp, hdroom->mtu); in mlxsw_sp_hdroom_bufs_reset_sizes()
432 delay_cells = mlxsw_sp_hdroom_buf_delay_get(mlxsw_sp, hdroom); in mlxsw_sp_hdroom_bufs_reset_sizes()
439 if (hdroom->mode == MLXSW_SP_HDROOM_MODE_DCB) { in mlxsw_sp_hdroom_bufs_reset_sizes()
453 const struct mlxsw_sp_hdroom *hdroom, bool force) in mlxsw_sp_hdroom_configure_buffers() argument
461 dirty = memcmp(&mlxsw_sp_port->hdroom->bufs, &hdroom->bufs, sizeof(hdroom->bufs)); in mlxsw_sp_hdroom_configure_buffers()
467 const struct mlxsw_sp_hdroom_buf *buf = &hdroom->bufs.buf[i]; in mlxsw_sp_hdroom_configure_buffers()
480 mlxsw_sp_port->hdroom->bufs = hdroom->bufs; in mlxsw_sp_hdroom_configure_buffers()
485 const struct mlxsw_sp_hdroom *hdroom, bool force) in mlxsw_sp_hdroom_configure_priomap() argument
492 dirty = memcmp(&mlxsw_sp_port->hdroom->prios, &hdroom->prios, sizeof(hdroom->prios)); in mlxsw_sp_hdroom_configure_priomap()
498 mlxsw_reg_pptb_prio_to_buff_pack(pptb_pl, prio, hdroom->prios.prio[prio].buf_idx); in mlxsw_sp_hdroom_configure_priomap()
504 mlxsw_sp_port->hdroom->prios = hdroom->prios; in mlxsw_sp_hdroom_configure_priomap()
509 const struct mlxsw_sp_hdroom *hdroom, bool force) in mlxsw_sp_hdroom_configure_int_buf() argument
515 dirty = memcmp(&mlxsw_sp_port->hdroom->int_buf, &hdroom->int_buf, sizeof(hdroom->int_buf)); in mlxsw_sp_hdroom_configure_int_buf()
519 mlxsw_reg_sbib_pack(sbib_pl, mlxsw_sp_port->local_port, hdroom->int_buf.size_cells); in mlxsw_sp_hdroom_configure_int_buf()
524 mlxsw_sp_port->hdroom->int_buf = hdroom->int_buf; in mlxsw_sp_hdroom_configure_int_buf()
529 const struct mlxsw_sp_hdroom *hdroom) in mlxsw_sp_hdroom_bufs_fit() argument
535 taken_headroom_cells += hdroom->bufs.buf[i].size_cells; in mlxsw_sp_hdroom_bufs_fit()
537 taken_headroom_cells += hdroom->int_buf.reserve_cells; in mlxsw_sp_hdroom_bufs_fit()
542 const struct mlxsw_sp_hdroom *hdroom, bool force) in __mlxsw_sp_hdroom_configure() argument
557 orig_hdroom = *mlxsw_sp_port->hdroom; in __mlxsw_sp_hdroom_configure()
560 if (hdroom->bufs.buf[i].size_cells) in __mlxsw_sp_hdroom_configure()
561 tmp_hdroom.bufs.buf[i] = hdroom->bufs.buf[i]; in __mlxsw_sp_hdroom_configure()
565 !mlxsw_sp_hdroom_bufs_fit(mlxsw_sp_port->mlxsw_sp, hdroom)) in __mlxsw_sp_hdroom_configure()
572 err = mlxsw_sp_hdroom_configure_priomap(mlxsw_sp_port, hdroom, force); in __mlxsw_sp_hdroom_configure()
576 err = mlxsw_sp_hdroom_configure_buffers(mlxsw_sp_port, hdroom, false); in __mlxsw_sp_hdroom_configure()
580 err = mlxsw_sp_hdroom_configure_int_buf(mlxsw_sp_port, hdroom, false); in __mlxsw_sp_hdroom_configure()
584 *mlxsw_sp_port->hdroom = *hdroom; in __mlxsw_sp_hdroom_configure()
597 const struct mlxsw_sp_hdroom *hdroom) in mlxsw_sp_hdroom_configure() argument
599 return __mlxsw_sp_hdroom_configure(mlxsw_sp_port, hdroom, false); in mlxsw_sp_hdroom_configure()
605 struct mlxsw_sp_hdroom hdroom = {}; in mlxsw_sp_port_headroom_init() local
609 hdroom.mtu = mlxsw_sp_port->dev->mtu; in mlxsw_sp_port_headroom_init()
610 hdroom.mode = MLXSW_SP_HDROOM_MODE_DCB; in mlxsw_sp_port_headroom_init()
612 hdroom.prios.prio[prio].lossy = true; in mlxsw_sp_port_headroom_init()
614 mlxsw_sp_hdroom_bufs_reset_lossiness(&hdroom); in mlxsw_sp_port_headroom_init()
615 mlxsw_sp_hdroom_bufs_reset_sizes(mlxsw_sp_port, &hdroom); in mlxsw_sp_port_headroom_init()
621 hdroom.bufs.buf[9].size_cells = mlxsw_sp_bytes_cells(mlxsw_sp, size9); in mlxsw_sp_port_headroom_init()
623 return __mlxsw_sp_hdroom_configure(mlxsw_sp_port, &hdroom, true); in mlxsw_sp_port_headroom_init()
1330 mlxsw_sp_port->hdroom = kzalloc(sizeof(*mlxsw_sp_port->hdroom), GFP_KERNEL); in mlxsw_sp_port_buffers_init()
1331 if (!mlxsw_sp_port->hdroom) in mlxsw_sp_port_buffers_init()
1333 mlxsw_sp_port->hdroom->mtu = mlxsw_sp_port->dev->mtu; in mlxsw_sp_port_buffers_init()
1349 kfree(mlxsw_sp_port->hdroom); in mlxsw_sp_port_buffers_init()
1355 kfree(mlxsw_sp_port->hdroom); in mlxsw_sp_port_buffers_fini()