Home
last modified time | relevance | path

Searched refs:ibdev (Results 1 – 25 of 58) sorted by relevance

123

/freebsd/sys/dev/cxgbe/iw_cxgbe/
H A Dprovider.c52 static int c4iw_modify_port(struct ib_device *ibdev, in c4iw_modify_port() argument
80 static int c4iw_process_mad(struct ib_device *ibdev, int mad_flags, in c4iw_process_mad() argument
112 struct ib_device *ibdev = ucontext->device; in c4iw_alloc_ucontext() local
114 struct c4iw_dev *rhp = to_c4iw_dev(ibdev); in c4iw_alloc_ucontext()
120 PDBG("%s ibdev %p\n", __func__, ibdev); in c4iw_alloc_ucontext()
227 struct ib_device *ibdev = pd->device; in c4iw_allocate_pd() local
231 CTR4(KTR_IW_CXGBE, "%s: ibdev %p, pd %p, data %p", __func__, ibdev, in c4iw_allocate_pd()
233 rhp = (struct c4iw_dev *) ibdev; in c4iw_allocate_pd()
256 ibdev, udata, pdid, php); in c4iw_allocate_pd()
261 c4iw_query_pkey(struct ib_device *ibdev, u8 port, u16 index, u16 *pkey) in c4iw_query_pkey() argument
[all …]
/freebsd/sys/dev/mlx4/mlx4_ib/
H A Dmlx4_ib_main.c86 static void do_slave_init(struct mlx4_ib_dev *ibdev, int slave, int do_init);
136 struct mlx4_ib_dev *ibdev = to_mdev(device); in mlx4_ib_get_netdev() local
140 dev = mlx4_get_protocol_dev(ibdev->dev, MLX4_PROT_ETH, port_num); in mlx4_ib_get_netdev()
144 if (mlx4_is_bonded(ibdev->dev)) { in mlx4_ib_get_netdev()
166 struct mlx4_ib_dev *ibdev, in mlx4_ib_update_gids_v1() argument
171 struct mlx4_dev *dev = ibdev->dev; in mlx4_ib_update_gids_v1()
199 struct mlx4_ib_dev *ibdev, in mlx4_ib_update_gids_v1_v2() argument
204 struct mlx4_dev *dev = ibdev->dev; in mlx4_ib_update_gids_v1_v2()
246 struct mlx4_ib_dev *ibdev, in mlx4_ib_update_gids() argument
249 if (ibdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_ROCE_V1_V2) in mlx4_ib_update_gids()
[all …]
H A Dmlx4_ib_cm.c135 static union ib_gid gid_from_req_msg(struct ib_device *ibdev, struct ib_mad *mad) in gid_from_req_msg() argument
144 id_map_find_by_sl_id(struct ib_device *ibdev, u32 slave_id, u32 sl_cm_id) in id_map_find_by_sl_id() argument
146 struct rb_root *sl_id_map = &to_mdev(ibdev)->sriov.sl_id_map; in id_map_find_by_sl_id()
192 static void id_map_find_del(struct ib_device *ibdev, int pv_cm_id) in id_map_find_del() argument
194 struct mlx4_ib_sriov *sriov = &to_mdev(ibdev)->sriov; in id_map_find_del()
202 found_ent = id_map_find_by_sl_id(ibdev, ent->slave_id, ent->sl_cm_id); in id_map_find_del()
210 static void sl_id_map_add(struct ib_device *ibdev, struct id_map_entry *new) in sl_id_map_add() argument
212 struct rb_root *sl_id_map = &to_mdev(ibdev)->sriov.sl_id_map; in sl_id_map_add()
218 ent = id_map_find_by_sl_id(ibdev, slave_id, sl_cm_id); in sl_id_map_add()
243 id_map_alloc(struct ib_device *ibdev, int slave_id, u32 sl_cm_id) in id_map_alloc() argument
[all …]
H A Dmlx4_ib.h61 #define mlx4_ib_warn(ibdev, format, arg...) \ argument
62 dev_warn((ibdev)->dma_device, MLX4_IB_DRV_NAME ": " format, ## arg)
629 static inline struct mlx4_ib_dev *to_mdev(struct ib_device *ibdev) in to_mdev() argument
631 return container_of(ibdev, struct mlx4_ib_dev, ib_dev); in to_mdev()
775 int mlx4_ib_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num,
789 int __mlx4_ib_query_port(struct ib_device *ibdev, u8 port,
791 int __mlx4_ib_query_pkey(struct ib_device *ibdev, u8 port, u16 index,
794 int __mlx4_ib_query_gid(struct ib_device *ibdev, u8 port, int index,
813 int mlx4_ib_find_real_gid(struct ib_device *ibdev, u8 port, __be64 guid);
815 int mlx4_ib_mcg_multiplex_handler(struct ib_device *ibdev, int port, int slave,
[all …]
H A Dmlx4_ib_mad.c217 static void smp_snoop(struct ib_device *ibdev, u8 port_num, const struct ib_mad *mad, in smp_snoop() argument
227 struct mlx4_ib_dev *dev = to_mdev(ibdev); in smp_snoop()
412 static int mlx4_ib_demux_sa_handler(struct ib_device *ibdev, int port, int slave, in mlx4_ib_demux_sa_handler() argument
420 ret = mlx4_ib_mcg_demux_handler(ibdev, port, slave, sa_mad); in mlx4_ib_demux_sa_handler()
428 int mlx4_ib_find_real_gid(struct ib_device *ibdev, u8 port, __be64 guid) in mlx4_ib_find_real_gid() argument
430 struct mlx4_ib_dev *dev = to_mdev(ibdev); in mlx4_ib_find_real_gid()
639 static int mlx4_ib_demux_mad(struct ib_device *ibdev, u8 port, in mlx4_ib_demux_mad() argument
643 struct mlx4_ib_dev *dev = to_mdev(ibdev); in mlx4_ib_demux_mad()
649 if (rdma_port_get_link_layer(ibdev, port) == IB_LINK_LAYER_INFINIBAND) in mlx4_ib_demux_mad()
656 mlx4_ib_warn(ibdev, "RoCE grh not present.\n"); in mlx4_ib_demux_mad()
[all …]
/freebsd/sys/dev/qlnx/qlnxr/
H A Dqlnxr_os.c129 ibev.device = &dev->ibdev; in qlnxr_ib_dispatch_event()
149 struct ib_device *ibdev; in qlnxr_register_device() local
155 ibdev = &dev->ibdev; in qlnxr_register_device()
163 INIT_IB_DEVICE_OPS(&ibdev->ops, qlnxr, QLNXR); in qlnxr_register_device()
164 strlcpy(ibdev->name, "qlnxr%d", IB_DEVICE_NAME_MAX); in qlnxr_register_device()
166 memset(&ibdev->node_guid, 0, sizeof(ibdev->node_guid)); in qlnxr_register_device()
167 memcpy(&ibdev->node_guid, dev->ha->primary_mac, ETHER_ADDR_LEN); in qlnxr_register_device()
169 memcpy(ibdev->node_desc, QLNXR_NODE_DESC, sizeof(QLNXR_NODE_DESC)); in qlnxr_register_device()
171 ibdev->owner = THIS_MODULE; in qlnxr_register_device()
172 ibdev->uverbs_abi_ver = 7; in qlnxr_register_device()
[all …]
/freebsd/sys/dev/mlx5/mlx5_ib/
H A Dmlx5_ib_mad.c57 static int process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num, in process_mad() argument
91 err = mlx5_MAD_IFC(to_mdev(ibdev), in process_mad()
181 static int process_pma_cmd(struct ib_device *ibdev, u8 port_num, in process_pma_cmd() argument
184 struct mlx5_ib_dev *dev = to_mdev(ibdev); in process_pma_cmd()
232 int mlx5_ib_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num, in mlx5_ib_process_mad() argument
238 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_ib_process_mad()
252 return process_pma_cmd(ibdev, port_num, in_mad, out_mad); in mlx5_ib_process_mad()
254 return process_mad(ibdev, mad_flags, port_num, in_wc, in_grh, in mlx5_ib_process_mad()
288 int mlx5_query_mad_ifc_smp_attr_node_info(struct ib_device *ibdev, in mlx5_query_mad_ifc_smp_attr_node_info() argument
301 err = mlx5_MAD_IFC(to_mdev(ibdev), 1, 1, 1, NULL, NULL, in_mad, in mlx5_query_mad_ifc_smp_attr_node_info()
[all …]
H A Dmlx5_ib_main.c103 struct mlx5_ib_dev *ibdev = container_of(this, struct mlx5_ib_dev, in mlx5_netdev_event() local
109 write_lock(&ibdev->roce.netdev_lock); in mlx5_netdev_event()
111 if (mlx5_netdev_match(ndev, ibdev->mdev, "mce")) in mlx5_netdev_event()
112 ibdev->roce.netdev = (event == NETDEV_UNREGISTER) ? in mlx5_netdev_event()
114 write_unlock(&ibdev->roce.netdev_lock); in mlx5_netdev_event()
121 if ((upper == ndev || (!upper && ndev == ibdev->roce.netdev)) in mlx5_netdev_event()
122 && ibdev->ib_active) { in mlx5_netdev_event()
125 ibev.device = &ibdev->ib_dev; in mlx5_netdev_event()
144 struct mlx5_ib_dev *ibdev = to_mdev(device); in mlx5_ib_get_netdev() local
149 read_lock(&ibdev->roce.netdev_lock); in mlx5_ib_get_netdev()
[all …]
H A Dmlx5_ib.h805 static inline struct mlx5_ib_dev *to_mdev(struct ib_device *ibdev) in to_mdev() argument
807 return container_of(ibdev, struct mlx5_ib_dev, ib_dev); in to_mdev()
956 int mlx5_ib_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num,
961 struct ib_xrcd *mlx5_ib_alloc_xrcd(struct ib_device *ibdev,
966 int mlx5_query_mad_ifc_smp_attr_node_info(struct ib_device *ibdev,
968 int mlx5_query_mad_ifc_system_image_guid(struct ib_device *ibdev,
970 int mlx5_query_mad_ifc_max_pkeys(struct ib_device *ibdev,
972 int mlx5_query_mad_ifc_vendor_id(struct ib_device *ibdev,
976 int mlx5_query_mad_ifc_pkey(struct ib_device *ibdev, u8 port, u16 index,
978 int mlx5_query_mad_ifc_gids(struct ib_device *ibdev, u
1035 mlx5_ib_odp_init_one(struct mlx5_ib_dev * ibdev) mlx5_ib_odp_init_one() argument
1036 mlx5_ib_odp_remove_one(struct mlx5_ib_dev * ibdev) mlx5_ib_odp_remove_one() argument
[all...]
/freebsd/sys/dev/mthca/
H A Dmthca_provider.c60 static int mthca_query_device(struct ib_device *ibdev, struct ib_device_attr *props, in mthca_query_device() argument
66 struct mthca_dev *mdev = to_mdev(ibdev); in mthca_query_device()
137 static int mthca_query_port(struct ib_device *ibdev, in mthca_query_port() argument
155 err = mthca_MAD_IFC(to_mdev(ibdev), 1, 1, in mthca_query_port()
167 props->gid_tbl_len = to_mdev(ibdev)->limits.gid_table_len; in mthca_query_port()
169 props->pkey_tbl_len = to_mdev(ibdev)->limits.pkey_table_len; in mthca_query_port()
186 static int mthca_modify_device(struct ib_device *ibdev, in mthca_modify_device() argument
194 if (mutex_lock_interruptible(&to_mdev(ibdev)->cap_mask_mutex)) in mthca_modify_device()
196 memcpy(ibdev->node_desc, props->node_desc, in mthca_modify_device()
198 mutex_unlock(&to_mdev(ibdev)->cap_mask_mutex); in mthca_modify_device()
[all …]
H A Dmthca_mad.c105 static void smp_snoop(struct ib_device *ibdev, in smp_snoop() argument
120 mthca_update_rate(to_mdev(ibdev), port_num); in smp_snoop()
121 update_sm_ah(to_mdev(ibdev), port_num, in smp_snoop()
125 event.device = ibdev; in smp_snoop()
140 event.device = ibdev; in smp_snoop()
197 int mthca_process_mad(struct ib_device *ibdev, in mthca_process_mad() argument
220 forward_trap(to_mdev(ibdev), port_num, in_mad); in mthca_process_mad()
257 !ib_query_port(ibdev, port_num, &pattr)) in mthca_process_mad()
260 err = mthca_MAD_IFC(to_mdev(ibdev), in mthca_process_mad()
267 mthca_err(to_mdev(ibdev), "MAD_IFC returned %d\n", err); in mthca_process_mad()
[all …]
/freebsd/sys/dev/irdma/
H A Dfbsd_kcompat.h58 #define set_ibdev_dma_device(ibdev, dev) \ argument
59 ibdev.dma_device = (dev)
88 static inline int irdma_iw_query_pkey(struct ib_device *ibdev, u8 port, u16 index, in irdma_iw_query_pkey() argument
146 enum rdma_link_layer irdma_get_link_layer(struct ib_device *ibdev,
148 int irdma_roce_port_immutable(struct ib_device *ibdev, u8 port_num,
150 int irdma_iw_port_immutable(struct ib_device *ibdev, u8 port_num,
152 int irdma_query_gid(struct ib_device *ibdev, u8 port, int index,
154 int irdma_query_gid_roce(struct ib_device *ibdev, u8 port, int index,
156 int irdma_query_pkey(struct ib_device *ibdev, u8 port, u16 index,
158 int irdma_query_port(struct ib_device *ibdev, u8 port,
[all …]
H A Dirdma_kcompat.c175 struct ib_device *ibdev = uctx->device; in irdma_alloc_ucontext() local
176 struct irdma_device *iwdev = to_iwdev(ibdev); in irdma_alloc_ucontext()
255 irdma_dev_err(&iwdev->ibdev, in irdma_alloc_ucontext()
488 irdma_dev_err(&rf->iwdev->ibdev, "CQP create AH error ret = %d opt_ret_val = %d", in irdma_create_ah_wait()
550 err = ib_get_cached_gid(&iwdev->ibdev, attr->port_num, in irdma_create_ah()
763 if (!rdma_protocol_roce(&iwdev->ibdev, 1)) in irdma_create_qp()
785 if (rdma_protocol_roce(&iwdev->ibdev, 1)) { in irdma_create_qp()
812 if (rdma_protocol_roce(&iwdev->ibdev, 1)) in irdma_create_qp()
827 if (rdma_protocol_roce(&iwdev->ibdev, 1)) { in irdma_create_qp()
847 if (rdma_protocol_iwarp(&iwdev->ibdev, 1)) { in irdma_create_qp()
[all …]
H A Dirdma_verbs.c44 irdma_query_device(struct ib_device *ibdev, in irdma_query_device() argument
48 struct irdma_device *iwdev = to_iwdev(ibdev); in irdma_query_device()
79 if (rdma_protocol_roce(ibdev, 1)) { in irdma_query_device()
654 if (rdma_protocol_roce(&iwdev->ibdev, 1)) { in irdma_validate_qp_attrs()
771 irdma_dev_warn(&iwqp->iwdev->ibdev, in irdma_wait_for_suspend()
934 irdma_dev_err(&iwdev->ibdev, in irdma_modify_qp_roce()
947 irdma_dev_err(&iwdev->ibdev, in irdma_modify_qp_roce()
977 irdma_dev_warn(&iwdev->ibdev, in irdma_modify_qp_roce()
3255 static if_t irdma_get_netdev(struct ib_device *ibdev, u8 port_num){ in irdma_get_netdev() argument
3256 struct irdma_device *iwdev = to_iwdev(ibdev); in irdma_get_netdev()
[all …]
H A Dosdep.h129 #define irdma_dev_err(ibdev, fmt, ...) \ argument
130 pr_err("%s:%s:%d ERR "fmt, (ibdev)->name, __func__, __LINE__, ##__VA_ARGS__)
131 #define irdma_dev_warn(ibdev, fmt, ...) \ argument
132 pr_warn("%s:%s:%d WARN "fmt, (ibdev)->name, __func__, __LINE__, ##__VA_ARGS__)
H A Dirdma_main.h367 struct ib_device ibdev; member
410 static inline struct irdma_device *to_iwdev(struct ib_device *ibdev) in to_iwdev() argument
412 return container_of(ibdev, struct irdma_device, ibdev); in to_iwdev()
523 struct ib_qp *irdma_get_qp(struct ib_device *ibdev, int qpn);
/freebsd/sys/dev/bnxt/bnxt_re/
H A Dib_verbs.h93 #define rdev_from_cq_in(cq_in) to_bnxt_re_dev(cq_in->device, ibdev)
95 #define GET_UVERBS_ABI_VERSION(ibdev) (ibdev->uverbs_abi_ver) argument
116 bnxt_re_query_fw_str(struct ib_device *ibdev, \
259 struct ifnet *bnxt_re_get_netdev(struct ib_device *ibdev,
262 int bnxt_re_query_device(struct ib_device *ibdev,
265 int bnxt_re_modify_device(struct ib_device *ibdev,
268 int bnxt_re_query_port(struct ib_device *ibdev, u8 port_num,
270 int bnxt_re_modify_port(struct ib_device *ibdev, u8 port_num,
273 int bnxt_re_get_port_immutable(struct ib_device *ibdev, u8 port_num,
276 int bnxt_re_query_pkey(struct ib_device *ibdev, u8 port_num,
[all …]
H A Dmain.c133 void bnxt_re_set_dma_device(struct ib_device *ibdev, struct bnxt_re_dev *rdev) in bnxt_re_set_dma_device() argument
135 ibdev->dma_device = &rdev->en_dev->pdev->dev; in bnxt_re_set_dma_device()
2018 struct bnxt_re_dev *rdev = to_bnxt_re_dev(device, ibdev.dev); in show_rev()
2027 struct bnxt_re_dev *rdev = to_bnxt_re_dev(device, ibdev.dev); in show_hca()
2029 return scnprintf(buf, PAGE_SIZE, "%s\n", rdev->ibdev.node_desc); in show_hca()
2041 struct ib_device *ibdev = &rdev->ibdev; in ib_register_device_compat() local
2047 strlcpy(ibdev->name, name, IB_DEVICE_NAME_MAX); in ib_register_device_compat()
2049 return ib_register_device(ibdev, NULL); in ib_register_device_compat()
2054 struct ib_device *ibdev = &rdev->ibdev; in bnxt_re_register_ib() local
2058 ibdev->owner = THIS_MODULE; in bnxt_re_register_ib()
[all …]
H A Dib_verbs.c62 rc = ib_resolve_eth_dmac(&rdev->ibdev, ah_attr); in bnxt_re_resolve_dmac_task()
125 struct ifnet *bnxt_re_get_netdev(struct ib_device *ibdev, in bnxt_re_get_netdev() argument
128 struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibdev, ibdev); in bnxt_re_get_netdev()
147 int bnxt_re_query_device(struct ib_device *ibdev, in bnxt_re_query_device() argument
151 struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibdev, ibdev); in bnxt_re_query_device()
223 int bnxt_re_modify_device(struct ib_device *ibdev, in bnxt_re_modify_device() argument
287 int bnxt_re_query_port(struct ib_device *ibdev, u8 port_num, in bnxt_re_query_port() argument
290 struct bnxt_re_dev *rdev = to_bnxt_re_dev(ibdev, ibdev); in bnxt_re_query_port()
332 int bnxt_re_modify_port(struct ib_device *ibdev, u8 port_num, in bnxt_re_modify_port() argument
352 int bnxt_re_get_port_immutable(struct ib_device *ibdev, u8 port_num, in bnxt_re_get_port_immutable() argument
[all …]
/freebsd/contrib/ofed/libcxgb4/
H A Ddev.c106 static struct ibv_context *c4iw_alloc_context(struct ibv_device *ibdev, in c4iw_alloc_context() argument
112 struct c4iw_dev *rhp = to_c4iw_dev(ibdev); in c4iw_alloc_context()
143 context->ibv_ctx.device = ibdev; in c4iw_alloc_context()
413 char devstr[IBV_SYSFS_PATH_MAX], ibdev[16], value[128], *cp; in cxgb4_driver_init() local
423 ibdev, sizeof ibdev) < 0) in cxgb4_driver_init()
426 devnum = atoi(&ibdev[5]); in cxgb4_driver_init()
428 if (ibdev[0] == 't' && ibdev[1] >= '4' && ibdev[1] <= '6' && in cxgb4_driver_init()
429 strstr(&ibdev[2], "nex") && devnum >= 0) { in cxgb4_driver_init()
430 snprintf(dev_str, sizeof(dev_str), "/dev/t%cnex/%d", ibdev[1], in cxgb4_driver_init()
482 ibdev, sizeof ibdev) < 0) in cxgb4_driver_init()
[all …]
/freebsd/sys/ofed/drivers/infiniband/core/
H A Dib_uverbs_uapi.c58 struct ib_device *ibdev, in uapi_create_write() argument
83 method_elm->disabled = !(ibdev->uverbs_ex_cmd_mask & in uapi_create_write()
86 method_elm->disabled = !(ibdev->uverbs_cmd_mask & in uapi_create_write()
273 static int uapi_merge_def(struct uverbs_api *uapi, struct ib_device *ibdev, in uapi_merge_def() argument
289 rc = uapi_merge_def(uapi, ibdev, def->chain, is_driver); in uapi_merge_def()
311 (void *)((u8 *)ibdev + def->needs_fn_offset); in uapi_merge_def()
323 if (def->func_is_supported(ibdev)) in uapi_merge_def()
344 uapi, ibdev, def, cur_obj_key, &cur_method_key); in uapi_merge_def()
641 struct uverbs_api *uverbs_alloc_api(struct ib_device *ibdev) in uverbs_alloc_api() argument
651 uapi->driver_id = ibdev->ops.driver_id; in uverbs_alloc_api()
[all …]
H A Dib_sysfs.c60 struct ib_device *ibdev; member
166 ret = ib_query_port(p->ibdev, p->port_num, &attr); in state_show()
181 ret = ib_query_port(p->ibdev, p->port_num, &attr); in lid_show()
195 ret = ib_query_port(p->ibdev, p->port_num, &attr); in lid_mask_count_show()
208 ret = ib_query_port(p->ibdev, p->port_num, &attr); in sm_lid_show()
221 ret = ib_query_port(p->ibdev, p->port_num, &attr); in sm_sl_show()
234 ret = ib_query_port(p->ibdev, p->port_num, &attr); in cap_mask_show()
249 ret = ib_query_port(p->ibdev, p->port_num, &attr); in rate_show()
323 ret = ib_query_port(p->ibdev, p->port_num, &attr); in phys_state_show()
334 switch (rdma_port_get_link_layer(p->ibdev, p->port_num)) { in link_layer_show()
[all …]
/freebsd/sys/dev/iser/
H A Diser_memory.c60 iser_data_buf_aligned_len(struct iser_data_buf *data, struct ib_device *ibdev) in iser_data_buf_aligned_len() argument
70 start_addr = ib_sg_dma_address(ibdev, sgl); in iser_data_buf_aligned_len()
80 end_addr = start_addr + ib_sg_dma_len(ibdev, sg); in iser_data_buf_aligned_len()
81 start_addr = ib_sg_dma_address(ibdev, next_sg); in iser_data_buf_aligned_len()
222 struct ib_device *ibdev = device->ib_device; in iser_reg_rdma_mem() local
228 aligned_len = iser_data_buf_aligned_len(mem, ibdev); in iser_reg_rdma_mem()
/freebsd/contrib/ofed/libirdma/
H A Dosdep.h124 #define irdma_dev_err(ibdev, fmt, ...) \ argument
125 pr_err("%s:%s:%d ERR "fmt, (ibdev)->name, __func__, __LINE__, ##__VA_ARGS__)
126 #define irdma_dev_warn(ibdev, fmt, ...) \ argument
127 pr_warn("%s:%s:%d WARN "fmt, (ibdev)->name, __func__, __LINE__, ##__VA_ARGS__)
/freebsd/sys/ofed/include/rdma/
H A Drdma_vt.h340 struct ib_device ibdev; /* Keep this first. Nothing above here */ member
412 static inline struct rvt_dev_info *ib_to_rvt(struct ib_device *ibdev) in ib_to_rvt() argument
414 return container_of(ibdev, struct rvt_dev_info, ibdev); in ib_to_rvt()
489 int rvt_check_ah(struct ib_device *ibdev, struct ib_ah_attr *ah_attr);

123