2 * Synaptics Modular Embedded Protocol (MEP) implementation
4 * Copyright (c) 2005 SDG Systems, LLC
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published by
8 * the Free Software Foundation.
11 #include <linux/module.h>
15 mep_host_format_cmd( u_int8_t
*pkt
, int addr
, int command
,
16 int num_data
, unsigned char *data
)
20 if (command
< MEP_HOST_CMD_SET_DEFAULT
) {
21 pkt
[MEP_HOST_HEADER
] = (u_int8_t
)command
| MEP_HOST_PKT_FORMAT_SHORT
;
26 size
+= num_data
+1; /* long command counts */
27 for (i
=0; i
<num_data
; i
++)
28 pkt
[MEP_HOST_DATA_START
+i
] = data
[i
];
29 pkt
[MEP_HOST_HEADER
] = num_data
+1;
30 pkt
[MEP_HOST_LONG_CMD
] = (u_int8_t
)command
;
33 /* addr of -1 is global */
35 pkt
[MEP_HOST_HEADER
] |= MEP_HOST_PKT_GLOBAL
;
37 pkt
[MEP_HOST_HEADER
] |= MEP_HOST_PKT_ADDR(addr
);
40 EXPORT_SYMBOL( mep_host_format_cmd
);
43 #define MEP_PROCESSING 1
46 mep_rx( struct mep_pkt_stream_desc
*ps
, u_int8_t octet
)
48 if (ps
->state
== MEP_IDLE
) {
50 ps
->pkt
.header
= octet
;
51 ps
->addr
= MEP_MODULE_PKT_ADDR(octet
);
52 ps
->ctrl
= MEP_MODULE_PKT_CTRL(octet
);
53 ps
->len
= MEP_MODULE_PKT_LEN(octet
);
54 ps
->remain_len
= ps
->len
;
55 ps
->datap
= ps
->pkt
.data
;
57 if (ps
->len
== 0) // This is ACK, most likely
58 return MEP_RX_PKT_DONE
;
60 ps
->state
= MEP_PROCESSING
;
64 /* processing state */
66 if (--ps
->remain_len
== 0) {
68 return MEP_RX_PKT_DONE
;
71 return MEP_RX_PKT_MORE
;
73 EXPORT_SYMBOL( mep_rx
);
76 mep_report_base_info( void *notused
, u_int8_t
*data
)
78 printk( "MEP Base: Manufacturer ID: %d\n", (int)data
[1] );
79 printk( "MEP Base: Major version: %d\n", (int)data
[2]>>4 );
80 printk( "MEP Base: Minor version: %d\n", (int)data
[2] & 0xf );
81 printk( "MEP Base: Class major version: %d\n", (int)data
[3]>>4 );
82 printk( "MEP Base: Class minor version: %d\n", (int)data
[3] & 0xf );
83 printk( "MEP Base: Module class ID: %d\n", (int)data
[4] );
84 printk( "MEP Base: Sub-class major version: %d\n", (int)data
[5]>>4 );
85 printk( "MEP Base: Sub-class minor version: %d\n", (int)data
[5] & 0xf );
86 printk( "MEP Base: Module sub-class ID: %d\n", (int)data
[6] );
88 EXPORT_SYMBOL( mep_report_base_info
);
91 mep_report_prod_info( void *notused
, u_int8_t
*data
)
93 printk( "MEP Product: Module major version: %d\n", (int)data
[1] );
94 printk( "MEP Product: Module minor version: %d\n", (int)data
[2] );
95 printk( "MEP Product: Module product ID: %d\n", (int)(data
[3]<<8) | data
[4] );
96 printk( "MEP Product: Features: %s %s\n", (data
[6]&2)?"CanDoze":"",
97 (data
[6]&1)?"GuestPort":"" );
99 EXPORT_SYMBOL(mep_report_prod_info
);
101 MODULE_LICENSE("GPL");