diff options
author | tzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2007-09-14 22:29:36 +0000 |
---|---|---|
committer | tzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2007-09-14 22:29:36 +0000 |
commit | c91b2cd29653da525d1a37cf680f4a75b2d3b208 (patch) | |
tree | f26185291a7ebb24902a2737d6e5b1fed75bb8c1 /xpp/xproto.h | |
parent | 236601045ee0a95930414d8d5f822d9a61054aae (diff) |
New xpp release (Xorcom rev 4648):
* New firmware protocol version: 2.8 .
* New firmwares fix input ports offhook.
* Cleanup INFO() messages during module loading.
* USB: Receive queue with TASKLETS [r4600]. Controlled by rx_tasklet
parameter to xpp_usb module (can be changed in runtime).
* The pcm_tasklet parameter in xpp module is deprecated:
- Does not actually do anything.
- If set during module loading, shows an ERR() message.
- Also appears in /proc/xpp/sync
* FXS: Hardware DTMF detection by default, can be disabled
by setting dtmf_detection=0 parameter to xpd_fxs.
PCM is muted when DTMF key is pressed.
* zapconf:
- Can now generate users.conf compatible with asterisk-gui.
- Optional command-line arguments denoting which files to generate.
Possible values are 'zaptel', 'zapata' and 'users'.
- Defaults to creating zaptel and zapata.
git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.2@3019 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'xpp/xproto.h')
-rw-r--r-- | xpp/xproto.h | 94 |
1 files changed, 41 insertions, 53 deletions
diff --git a/xpp/xproto.h b/xpp/xproto.h index e9b8120..9f0257f 100644 --- a/xpp/xproto.h +++ b/xpp/xproto.h @@ -29,6 +29,26 @@ #include <linux/proc_fs.h> #include <zaptel.h> +struct xpd_addr { + uint8_t unit:UNIT_BITS; + uint8_t subunit:SUBUNIT_BITS; + uint8_t reserved:1; + uint8_t sync_master:1; +} PACKED; + +struct xpacket_header { + uint16_t packet_len:10; + uint16_t reserved:1; + uint16_t is_pcm:1; + uint16_t timeslot:4; + uint8_t opcode; + struct xpd_addr addr; +} PACKED; + +#define XPACKET_OP(p) ((p)->head.opcode) +#define XPACKET_LEN(p) ((p)->head.packet_len) +#define XPACKET_ADDR(p) ((p)->head.addr) + #define PROTO_TABLE(n) n ## _protocol_table /* @@ -52,22 +72,15 @@ typedef byte xpd_type_t; #define PCM_CHUNKSIZE (CHANNELS_PERXPD * 8) /* samples of 8 bytes */ -typedef struct xpd_addr { - byte unit:UNIT_BITS; - byte subunit:SUBUNIT_BITS; - byte reserved:1; - byte sync_master:1; -} PACKED xpd_addr_t; - -bool valid_xpd_addr(const xpd_addr_t *addr); -void xpd_set_addr(xpd_addr_t *addr, int xpd_num); +bool valid_xpd_addr(const struct xpd_addr *addr); +void xpd_set_addr(struct xpd_addr *addr, int xpd_num); #define XPROTO_NAME(card,op) card ## _ ## op #define XPROTO_HANDLER(card,op) XPROTO_NAME(card,op ## _handler) #define XPROTO_CALLER(card,op) XPROTO_NAME(card,op ## _send) #define HANDLER_DEF(card,op) \ - int XPROTO_HANDLER(card,op) ( \ + static int XPROTO_HANDLER(card,op) ( \ xbus_t *xbus, \ xpd_t *xpd, \ const xproto_entry_t *cmd, \ @@ -79,23 +92,18 @@ void xpd_set_addr(xpd_addr_t *addr, int xpd_num); int CALL_PROTO(card, op, xbus_t *xbus, xpd_t *xpd, ## __VA_ARGS__ ) #define HOSTCMD(card, op, ...) \ - DECLARE_CMD(card, op, ## __VA_ARGS__ ); \ - EXPORT_SYMBOL(XPROTO_CALLER(card, op)); \ - DECLARE_CMD(card, op, ## __VA_ARGS__ ) + DECLARE_CMD(card, op, ## __VA_ARGS__ ) #define RPACKET_NAME(card,op) XPROTO_NAME(RPACKET_ ## card, op) #define RPACKET_TYPE(card,op) struct RPACKET_NAME(card, op) -#define DEF_RPACKET_DATA(card,op, ...) \ - RPACKET_TYPE(card,op) { \ - uint16_t datalen;\ - byte opcode; \ - xpd_addr_t addr; \ - __VA_ARGS__ \ +#define DEF_RPACKET_DATA(card,op, ...) \ + RPACKET_TYPE(card,op) { \ + struct xpacket_header head; \ + __VA_ARGS__ \ } PACKED -#define RPACKET_HEADERSIZE (sizeof(uint16_t) + sizeof(xpd_addr_t) + 1) -#define RPACKET_CAST(p,card,op) ((RPACKET_TYPE(card,op) *)p) -#define RPACKET_FIELD(p,card,op,field) (RPACKET_CAST(p,card,op)->field) +#define RPACKET_HEADERSIZE sizeof(struct xpacket_header) +#define RPACKET_FIELD(p,card,op,field) (((RPACKET_TYPE(card,op) *)(p))->field) #define RPACKET_SIZE(card,op) sizeof(RPACKET_TYPE(card,op)) #define XENTRY(prototab,module,op) \ @@ -106,12 +114,11 @@ void xpd_set_addr(xpd_addr_t *addr, int xpd_num); .table = &PROTO_TABLE(prototab) \ } - - -#define XPACKET_INIT(p, card, op) \ - do { \ - p->opcode = XPROTO_NAME(card,op); \ - p->datalen = RPACKET_SIZE(card,op); \ +#define XPACKET_INIT(p, card, op, to) \ + do { \ + XPACKET_OP(p) = XPROTO_NAME(card,op); \ + XPACKET_LEN(p) = RPACKET_SIZE(card,op); \ + xpd_set_addr(&XPACKET_ADDR(p), (to)); \ } while(0) #define XFRAME_NEW(frm, p, xbus, card, op, to) \ @@ -124,8 +131,7 @@ void xpd_set_addr(xpd_addr_t *addr, int xpd_num); (p) = xframe_next_packet(frm, len); \ if(!(p)) \ return -ENOMEM; \ - XPACKET_INIT(p, card, op); \ - xpd_set_addr(&(p)->addr, (to)); \ + XPACKET_INIT(p, card, op, to); \ } while(0) #endif @@ -215,6 +221,7 @@ struct xops { int (*card_ioctl)(xpd_t *xpd, int pos, unsigned int cmd, unsigned long arg); int (*card_open)(xpd_t *xpd, lineno_t pos); int (*card_close)(xpd_t *xpd, lineno_t pos); + int (*card_register_reply)(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *reg); int (*XPD_STATE)(xbus_t *xbus, xpd_t *xpd, bool on); int (*RING)(xbus_t *xbus, xpd_t *xpd, lineno_t chan, bool on); @@ -241,30 +248,14 @@ struct xproto_table { #include "card_global.h" #include "card_fxs.h" #include "card_fxo.h" - -enum opcodes { - XPROTO_NAME(GLOBAL, NULL_REPLY) = 0xFE, - XPROTO_NAME(GLOBAL, DESC_REQ) = 0x04, - XPROTO_NAME(GLOBAL, DEV_DESC) = 0x05, - XPROTO_NAME(GLOBAL, REGISTER_REQUEST) = 0x0F, -/**/ - XPROTO_NAME(GLOBAL, PCM_WRITE) = 0x11, - XPROTO_NAME(GLOBAL, PCM_READ) = 0x12, -/**/ - XPROTO_NAME(GLOBAL, SYNC_SOURCE) = 0x19, - XPROTO_NAME(GLOBAL, SYNC_REPLY) = 0x1A, -/**/ - XPROTO_NAME(GLOBAL, ERROR_CODE) = 0x22, - XPROTO_NAME(GLOBAL, RESET_SYNC_COUNTERS) = 0x23, -}; +#include "card_bri.h" +#include "card_pri.h" #define MEMBER(card,op) RPACKET_TYPE(card,op) RPACKET_NAME(card,op) struct xpacket { - uint16_t datalen; - byte opcode; - xpd_addr_t addr; + struct xpacket_header head; union { MEMBER(GLOBAL, NULL_REPLY); MEMBER(GLOBAL, DESC_REQ); @@ -275,10 +266,7 @@ struct xpacket { MEMBER(GLOBAL, ERROR_CODE); MEMBER(FXS, SIG_CHANGED); - MEMBER(FXS, REGISTER_REPLY); - MEMBER(FXO, SIG_CHANGED); - MEMBER(FXO, DAA_REPLY); byte data[0]; }; @@ -288,7 +276,7 @@ struct xpacket { void dump_packet(const char *msg, xpacket_t *packet, bool print_dbg); void dump_reg_cmd(const char msg[], const reg_cmd_t *regcmd, bool writing); int xframe_receive(xbus_t *xbus, xframe_t *xframe); -void notify_bad_xpd(const char *funcname, xbus_t *xbus, const xpd_addr_t addr, const char *msg); +void notify_bad_xpd(const char *funcname, xbus_t *xbus, const struct xpd_addr addr, const char *msg); int xproto_register(const xproto_table_t *proto_table); void xproto_unregister(const xproto_table_t *proto_table); const xproto_entry_t *xproto_global_entry(byte opcode); |