summaryrefslogtreecommitdiff
path: root/drivers/dahdi/xpp/xbus-core.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dahdi/xpp/xbus-core.h')
-rw-r--r--drivers/dahdi/xpp/xbus-core.h292
1 files changed, 143 insertions, 149 deletions
diff --git a/drivers/dahdi/xpp/xbus-core.h b/drivers/dahdi/xpp/xbus-core.h
index 7a629cf..fc1b53d 100644
--- a/drivers/dahdi/xpp/xbus-core.h
+++ b/drivers/dahdi/xpp/xbus-core.h
@@ -39,10 +39,10 @@ struct xbus_workqueue;
#ifdef __KERNEL__
struct xbus_ops {
- int (*xframe_send_pcm)(xbus_t *xbus, xframe_t *xframe);
- int (*xframe_send_cmd)(xbus_t *xbus, xframe_t *xframe);
- xframe_t *(*alloc_xframe)(xbus_t *xbus, gfp_t gfp_flags);
- void (*free_xframe)(xbus_t *xbus, xframe_t *xframe);
+ int (*xframe_send_pcm) (xbus_t *xbus, xframe_t *xframe);
+ int (*xframe_send_cmd) (xbus_t *xbus, xframe_t *xframe);
+ xframe_t *(*alloc_xframe) (xbus_t *xbus, gfp_t gfp_flags);
+ void (*free_xframe) (xbus_t *xbus, xframe_t *xframe);
};
/*
@@ -67,19 +67,11 @@ enum {
/* yucky, make an instance so we can size it... */
static struct xbus_counters {
- char *name;
+ char *name;
} xbus_counters[] = {
- C_(UNITS),
- C_(TX_XFRAME_PCM),
- C_(RX_XFRAME_PCM),
- C_(TX_PACK_PCM),
- C_(RX_PACK_PCM),
- C_(TX_BYTES),
- C_(RX_BYTES),
- C_(TX_PCM_FRAG),
- C_(RX_CMD),
- C_(TX_CMD),
-};
+C_(UNITS), C_(TX_XFRAME_PCM), C_(RX_XFRAME_PCM), C_(TX_PACK_PCM),
+ C_(RX_PACK_PCM), C_(TX_BYTES), C_(RX_BYTES),
+ C_(TX_PCM_FRAG), C_(RX_CMD), C_(TX_CMD),};
#undef C_
@@ -99,17 +91,17 @@ enum xbus_state {
const char *xbus_statename(enum xbus_state st);
struct xbus_transport {
- struct xbus_ops *ops;
- void *priv;
- struct device *transport_device;
- ushort max_send_size;
- enum xbus_state xbus_state;
- unsigned long transport_flags;
- spinlock_t state_lock;
- atomic_t transport_refcount;
- wait_queue_head_t transport_unused;
- spinlock_t lock;
- char model_string[MAX_ENV_STR];
+ struct xbus_ops *ops;
+ void *priv;
+ struct device *transport_device;
+ ushort max_send_size;
+ enum xbus_state xbus_state;
+ unsigned long transport_flags;
+ spinlock_t state_lock;
+ atomic_t transport_refcount;
+ wait_queue_head_t transport_unused;
+ spinlock_t lock;
+ char model_string[MAX_ENV_STR];
};
#define MAX_SEND_SIZE(xbus) ((xbus)->transport.max_send_size)
@@ -127,15 +119,15 @@ void transportops_put(xbus_t *xbus);
* Encapsulate all poll related data of a single xbus.
*/
struct xbus_workqueue {
- struct workqueue_struct *wq;
- struct work_struct xpds_init_work;
- bool xpds_init_done;
- struct list_head card_list;
- int num_units;
- int num_units_initialized;
- wait_queue_head_t wait_for_xpd_initialization;
- spinlock_t worker_lock;
- struct semaphore running_initialization;
+ struct workqueue_struct *wq;
+ struct work_struct xpds_init_work;
+ bool xpds_init_done;
+ struct list_head card_list;
+ int num_units;
+ int num_units_initialized;
+ wait_queue_head_t wait_for_xpd_initialization;
+ spinlock_t worker_lock;
+ struct semaphore running_initialization;
};
/*
@@ -152,10 +144,10 @@ void put_xframe(struct xframe_queue *q, xframe_t *xframe);
#define FREE_SEND_XFRAME(xbus, xframe) put_xframe(&(xbus)->send_pool, (xframe))
#define FREE_RECV_XFRAME(xbus, xframe) put_xframe(&(xbus)->receive_pool, (xframe))
-xbus_t *xbus_num(uint num);
-xbus_t *get_xbus(const char *msg, uint num);
-void put_xbus(const char *msg, xbus_t *xbus);
-int refcount_xbus(xbus_t *xbus);
+xbus_t *xbus_num(uint num);
+xbus_t *get_xbus(const char *msg, uint num);
+void put_xbus(const char *msg, xbus_t *xbus);
+int refcount_xbus(xbus_t *xbus);
/*
* Echo canceller related data
@@ -163,17 +155,17 @@ int refcount_xbus(xbus_t *xbus);
#define ECHO_TIMESLOTS 128
struct echoops {
- int (*ec_set)(xpd_t *xpd, int pos, bool on);
- int (*ec_get)(xpd_t *xpd, int pos);
- int (*ec_update)(xbus_t *xbus);
- void (*ec_dump)(xbus_t *xbus);
+ int (*ec_set) (xpd_t *xpd, int pos, bool on);
+ int (*ec_get) (xpd_t *xpd, int pos);
+ int (*ec_update) (xbus_t *xbus);
+ void (*ec_dump) (xbus_t *xbus);
};
struct xbus_echo_state {
- const struct echoops *echoops;
- __u8 timeslots[ECHO_TIMESLOTS];
- int xpd_idx;
- struct device_attribute *da[MAX_XPDS];
+ const struct echoops *echoops;
+ __u8 timeslots[ECHO_TIMESLOTS];
+ int xpd_idx;
+ struct device_attribute *da[MAX_XPDS];
};
#define ECHOOPS(xbus) ((xbus)->echo_state.echoops)
#define EC_METHOD(name, xbus) (ECHOOPS(xbus)->name)
@@ -183,126 +175,128 @@ struct xbus_echo_state {
* An xbus is a transport layer for Xorcom Protocol commands
*/
struct xbus {
- char busname[XBUS_NAMELEN]; /* set by xbus_new() */
+ char busname[XBUS_NAMELEN]; /* set by xbus_new() */
/* low-level bus drivers set these 2 fields */
- char connector[XBUS_DESCLEN];
- char label[LABEL_SIZE];
- __u8 revision; /* Protocol revision */
- struct xbus_transport transport;
- struct dahdi_device *ddev;
+ char connector[XBUS_DESCLEN];
+ char label[LABEL_SIZE];
+ __u8 revision; /* Protocol revision */
+ struct xbus_transport transport;
+ struct dahdi_device *ddev;
- int num;
- struct xpd *xpds[MAX_XPDS];
- struct xbus_echo_state echo_state;
+ int num;
+ struct xpd *xpds[MAX_XPDS];
+ struct xbus_echo_state echo_state;
- int command_tick_counter;
- int usec_nosend; /* Firmware flow control */
- struct xframe_queue command_queue;
- wait_queue_head_t command_queue_empty;
+ int command_tick_counter;
+ int usec_nosend; /* Firmware flow control */
+ struct xframe_queue command_queue;
+ wait_queue_head_t command_queue_empty;
- struct xframe_queue send_pool; /* empty xframes for send */
- struct xframe_queue receive_pool; /* empty xframes for receive */
+ struct xframe_queue send_pool; /* empty xframes for send */
+ struct xframe_queue receive_pool; /* empty xframes for receive */
/* tasklet processing */
- struct xframe_queue receive_queue;
- struct tasklet_struct receive_tasklet;
- int cpu_rcv_intr[NR_CPUS];
- int cpu_rcv_tasklet[NR_CPUS];
+ struct xframe_queue receive_queue;
+ struct tasklet_struct receive_tasklet;
+ int cpu_rcv_intr[NR_CPUS];
+ int cpu_rcv_tasklet[NR_CPUS];
struct quirks {
unsigned int has_fxo:1;
unsigned int has_digital_span:1;
- } quirks;
- bool self_ticking;
- enum sync_mode sync_mode;
+ } quirks;
+ bool self_ticking;
+ enum sync_mode sync_mode;
/* Managed by low-level drivers: */
- enum sync_mode sync_mode_default;
- struct timer_list command_timer;
- unsigned int xbus_frag_count;
- struct xframe_queue pcm_tospan;
+ enum sync_mode sync_mode_default;
+ struct timer_list command_timer;
+ unsigned int xbus_frag_count;
+ struct xframe_queue pcm_tospan;
- struct xpp_ticker ticker; /* for tick rate */
- struct xpp_drift drift; /* for tick offset */
+ struct xpp_ticker ticker; /* for tick rate */
+ struct xpp_drift drift; /* for tick offset */
- atomic_t pcm_rx_counter;
- unsigned int global_counter;
+ atomic_t pcm_rx_counter;
+ unsigned int global_counter;
/* Device-Model */
- struct device astribank;
+ struct device astribank;
#define dev_to_xbus(dev) container_of(dev, struct xbus, astribank)
- struct kref kref;
+ struct kref kref;
#define kref_to_xbus(k) container_of(k, struct xbus, kref)
- spinlock_t lock;
+ spinlock_t lock;
/* PCM metrics */
- struct timeval last_tx_sync;
- struct timeval last_rx_sync;
- unsigned long max_tx_sync;
- unsigned long min_tx_sync;
- unsigned long max_rx_sync;
- unsigned long min_rx_sync;
- unsigned long max_rx_process; /* packet processing time (usec) */
+ struct timeval last_tx_sync;
+ struct timeval last_rx_sync;
+ unsigned long max_tx_sync;
+ unsigned long min_tx_sync;
+ unsigned long max_rx_sync;
+ unsigned long min_rx_sync;
+ unsigned long max_rx_process; /* packet processing time (usec) */
#ifdef SAMPLE_TICKS
#define SAMPLE_SIZE 1000
- int sample_ticks[SAMPLE_SIZE];
- bool sample_running;
- int sample_pos;
+ int sample_ticks[SAMPLE_SIZE];
+ bool sample_running;
+ int sample_pos;
#endif
- struct xbus_workqueue worker;
+ struct xbus_workqueue worker;
/*
* Sync adjustment
*/
- int sync_adjustment;
- int sync_adjustment_offset;
- long pll_updated_at;
+ int sync_adjustment;
+ int sync_adjustment_offset;
+ long pll_updated_at;
- atomic_t num_xpds;
+ atomic_t num_xpds;
#ifdef CONFIG_PROC_FS
- struct proc_dir_entry *proc_xbus_dir;
- struct proc_dir_entry *proc_xbus_summary;
+ struct proc_dir_entry *proc_xbus_dir;
+ struct proc_dir_entry *proc_xbus_summary;
#ifdef PROTOCOL_DEBUG
- struct proc_dir_entry *proc_xbus_command;
+ struct proc_dir_entry *proc_xbus_command;
#endif
#endif
/* statistics */
- int counters[XBUS_COUNTER_MAX];
+ int counters[XBUS_COUNTER_MAX];
};
#endif
#define XFRAME_MAGIC 123456L
struct xframe {
- unsigned long xframe_magic;
- struct list_head frame_list;
- atomic_t frame_len;
- xbus_t *xbus;
- struct timeval tv_created;
- struct timeval tv_queued;
- struct timeval tv_submitted;
- struct timeval tv_received;
+ unsigned long xframe_magic;
+ struct list_head frame_list;
+ atomic_t frame_len;
+ xbus_t *xbus;
+ struct timeval tv_created;
+ struct timeval tv_queued;
+ struct timeval tv_submitted;
+ struct timeval tv_received;
/* filled by transport layer */
- size_t frame_maxlen;
- __u8 *packets; /* max XFRAME_DATASIZE */
- __u8 *first_free;
- int usec_towait; /* prevent overflowing AB */
- void *priv;
+ size_t frame_maxlen;
+ __u8 *packets; /* max XFRAME_DATASIZE */
+ __u8 *first_free;
+ int usec_towait; /* prevent overflowing AB */
+ void *priv;
};
-void xframe_init(xbus_t *xbus, xframe_t *xframe, void *buf, size_t maxsize, void *priv);
+void xframe_init(xbus_t *xbus, xframe_t *xframe, void *buf, size_t maxsize,
+ void *priv);
#define XFRAME_LEN(frame) atomic_read(&(frame)->frame_len)
-int xbus_core_init(void); /* Initializer */
-void xbus_core_shutdown(void); /* Terminator */
+int xbus_core_init(void); /* Initializer */
+void xbus_core_shutdown(void); /* Terminator */
/* Frame handling */
-void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe, int debug);
+void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe,
+ int debug);
int send_cmd_frame(xbus_t *xbus, xframe_t *xframe);
/*
@@ -320,39 +314,40 @@ xpacket_t *xframe_next_packet(xframe_t *xframe, int len);
#define XBUS_UNIT(idx) ((idx) / MAX_SUBUNIT)
#define XBUS_SUBUNIT(idx) ((idx) % MAX_SUBUNIT)
-xpd_t *xpd_of(const xbus_t *xbus, int xpd_num);
-xpd_t *xpd_byaddr(const xbus_t *xbus, uint unit, uint subunit);
-int xbus_check_unique(xbus_t *xbus);
-bool xbus_setstate(xbus_t *xbus, enum xbus_state newstate);
-bool xbus_setflags(xbus_t *xbus, int flagbit, bool on);
-xbus_t *xbus_new(struct xbus_ops *ops, ushort max_send_size, struct device *transport_device, void *priv);
-void xbus_free(xbus_t *xbus);
-int xbus_connect(xbus_t *xbus);
-int xbus_activate(xbus_t *xbus);
-void xbus_deactivate(xbus_t *xbus);
-void xbus_disconnect(xbus_t *xbus);
-void xbus_receive_xframe(xbus_t *xbus, xframe_t *xframe);
-int xbus_process_worker(xbus_t *xbus);
-int waitfor_xpds(xbus_t *xbus, char *buf);
-
-int xbus_xpd_bind(xbus_t *xbus, xpd_t *xpd, int unit, int subunit);
-int xbus_xpd_unbind(xbus_t *xbus, xpd_t *xpd);
+xpd_t *xpd_of(const xbus_t *xbus, int xpd_num);
+xpd_t *xpd_byaddr(const xbus_t *xbus, uint unit, uint subunit);
+int xbus_check_unique(xbus_t *xbus);
+bool xbus_setstate(xbus_t *xbus, enum xbus_state newstate);
+bool xbus_setflags(xbus_t *xbus, int flagbit, bool on);
+xbus_t *xbus_new(struct xbus_ops *ops, ushort max_send_size,
+ struct device *transport_device, void *priv);
+void xbus_free(xbus_t *xbus);
+int xbus_connect(xbus_t *xbus);
+int xbus_activate(xbus_t *xbus);
+void xbus_deactivate(xbus_t *xbus);
+void xbus_disconnect(xbus_t *xbus);
+void xbus_receive_xframe(xbus_t *xbus, xframe_t *xframe);
+int xbus_process_worker(xbus_t *xbus);
+int waitfor_xpds(xbus_t *xbus, char *buf);
+
+int xbus_xpd_bind(xbus_t *xbus, xpd_t *xpd, int unit, int subunit);
+int xbus_xpd_unbind(xbus_t *xbus, xpd_t *xpd);
/* sysfs */
-int xpd_device_register(xbus_t *xbus, xpd_t *xpd);
-void xpd_device_unregister(xpd_t *xpd);
-int echocancel_xpd(xpd_t *xpd, int on);
+int xpd_device_register(xbus_t *xbus, xpd_t *xpd);
+void xpd_device_unregister(xpd_t *xpd);
+int echocancel_xpd(xpd_t *xpd, int on);
-int xbus_is_registered(xbus_t *xbus);
-int xbus_register_dahdi_device(xbus_t *xbus);
-void xbus_unregister_dahdi_device(xbus_t *xbus);
+int xbus_is_registered(xbus_t *xbus);
+int xbus_register_dahdi_device(xbus_t *xbus);
+void xbus_unregister_dahdi_device(xbus_t *xbus);
-int xpp_driver_init(void);
-void xpp_driver_exit(void);
-int xbus_sysfs_transport_create(xbus_t *xbus);
-void xbus_sysfs_transport_remove(xbus_t *xbus);
-int xbus_sysfs_create(xbus_t *xbus);
-void xbus_sysfs_remove(xbus_t *xbus);
+int xpp_driver_init(void);
+void xpp_driver_exit(void);
+int xbus_sysfs_transport_create(xbus_t *xbus);
+void xbus_sysfs_transport_remove(xbus_t *xbus);
+int xbus_sysfs_create(xbus_t *xbus);
+void xbus_sysfs_remove(xbus_t *xbus);
#ifdef OLD_HOTPLUG_SUPPORT_269
/* Copy from new kernels lib/kobject_uevent.c */
@@ -367,7 +362,6 @@ enum kobject_action {
};
#endif
-void astribank_uevent_send(xbus_t *xbus, enum kobject_action act);
-
-#endif /* XBUS_CORE_H */
+void astribank_uevent_send(xbus_t *xbus, enum kobject_action act);
+#endif /* XBUS_CORE_H */