c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota/*
16e76cdd6e3cfaac7d91c3b0644ee1bc6cf52347agiri * This file contains definitions imported from the OFED rds header info.h.
16e76cdd6e3cfaac7d91c3b0644ee1bc6cf52347agiri * Oracle elects to have and use the contents of info.h under and
16e76cdd6e3cfaac7d91c3b0644ee1bc6cf52347agiri * governed by the OpenIB.org BSD license.
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota */
16e76cdd6e3cfaac7d91c3b0644ee1bc6cf52347agiri
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota/*
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota */
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota#ifndef _RDSV3_INFO_H
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota#define _RDSV3_INFO_H
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Otastruct rdsv3_info_iterator {
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota char *addr;
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota unsigned long offset;
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota};
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Otastruct rdsv3_info_lengths {
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota unsigned int nr;
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota unsigned int each;
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota};
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Otastruct rdsv3_sock;
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota/*
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota * These functions must fill in the fields of @lens to reflect the size
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota * of the available info source. If the snapshot fits in @len then it
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota * should be copied using @iter. The caller will deduce if it was copied
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota * or not by comparing the lengths.
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota */
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Otatypedef void (*rdsv3_info_func)(struct rsock *sock, unsigned int len,
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota struct rdsv3_info_iterator *iter,
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota struct rdsv3_info_lengths *lens);
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota#define rdsv3_info_copy(iter, data, bytes) \
b27516f55237249607f754e6e42e865f12456675agiri (void) ddi_copyout(data, iter->addr + iter->offset, bytes, 0); \
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota iter->offset += bytes
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Otavoid rdsv3_info_register_func(int optname, rdsv3_info_func func);
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Otavoid rdsv3_info_deregister_func(int optname, rdsv3_info_func func);
b27516f55237249607f754e6e42e865f12456675agiriint rdsv3_info_ioctl(struct rsock *sock, int optname, char *optval,
b27516f55237249607f754e6e42e865f12456675agiri int32_t *rvalp);
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota
c0dd49bdd68c0d758a67d56f07826f3b45cfc664Eiji Ota#endif /* _RDSV3_INFO_H */