#ifndef _SYS_SBP2_IMPL_H
#define _SYS_SBP2_IMPL_H
#include <sys/sbp2/common.h>
#include <sys/sbp2/bus.h>
#include <sys/sbp2/driver.h>
#include <sys/note.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct sbp2_cfgrom_parse_arg {
sbp2_cfgrom_ent_t *pa_dir;
sbp2_cfgrom_ent_t *pa_pdir;
sbp2_cfgrom_ent_t *pa_ref;
int pa_depth;
} sbp2_cfgrom_parse_arg_t;
typedef struct sbp2_cfgrom_ent_by_key {
uint8_t kt;
uint8_t kv;
int num;
sbp2_cfgrom_ent_t *ent;
int cnt;
} sbp2_cfgrom_ent_by_key_t;
_NOTE(SCHEME_PROTECTS_DATA("unique per call", { sbp2_cfgrom_ent_by_key
sbp2_cfgrom_parse_arg }))
enum {
SBP2_CFGROM_MAX_DEPTH = 5,
SBP2_CFGROM_GROW_INCR = 4,
SBP2_MOT_MIN = 500,
SBP2_MOT_DFLT = 2000,
SBP2_ORB_SIZE_MIN = 4,
SBP2_ORB_SIZE_DFLT = 32
};
#define SBP2_CSR_BASE(t) t->t_bus->sb_csr_base
#define SBP2_CFGROM_ADDR(t) t->t_bus->sb_cfgrom_addr
#define SBP2_GET_IBLOCK_COOKIE(t) \
(t)->t_bus->sb_get_iblock_cookie((t)->t_bus_hdl)
#define SBP2_GET_NODE_ID(t) (t)->t_bus->sb_get_node_id((t)->t_bus_hdl)
#define SBP2_ALLOC_BUF(t, buf) (t)->t_bus->sb_alloc_buf((t)->t_bus_hdl, buf)
#define SBP2_FREE_BUF(t, buf) (t)->t_bus->sb_free_buf((t)->t_bus_hdl, buf)
#define SBP2_SYNC_BUF(t, buf, offset, length, type) \
(t)->t_bus->sb_sync_buf((t)->t_bus_hdl, buf, offset, length, type)
#define SBP2_BUF_RD_DONE(t, buf, reqh, error) \
(t)->t_bus->sb_buf_rd_done((t)->t_bus_hdl, buf, reqh, error)
#define SBP2_BUF_WR_DONE(t, buf, reqh, error) \
(t)->t_bus->sb_buf_wr_done((t)->t_bus_hdl, buf, reqh, error)
#define SBP2_ALLOC_CMD(t, cmdp, f) \
(t)->t_bus->sb_alloc_cmd((t)->t_bus_hdl, cmdp, f)
#define SBP2_FREE_CMD(t, cmd) \
(t)->t_bus->sb_free_cmd((t)->t_bus_hdl, cmd)
#define SBP2_RQ(t, cmd, addr, q, berr) \
(t)->t_bus->sb_rq((t)->t_bus_hdl, cmd, addr, q, berr)
#define SBP2_RB(t, cmd, addr, bp, len, berr) \
(t)->t_bus->sb_rb((t)->t_bus_hdl, cmd, addr, bp, len, berr)
#define SBP2_WQ(t, cmd, addr, q, berr) \
(t)->t_bus->sb_wq((t)->t_bus_hdl, cmd, addr, q, berr)
#define SBP2_WB(t, cmd, addr, bp, len, berr) \
(t)->t_bus->sb_wb((t)->t_bus_hdl, cmd, addr, bp, len, berr)
int sbp2_cfgrom_parse(sbp2_tgt_t *, sbp2_cfgrom_t *);
void sbp2_cfgrom_free(sbp2_tgt_t *, sbp2_cfgrom_t *);
#ifdef __cplusplus
}
#endif
#endif