00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00073 #ifndef _IPMI_SOL_H
00074 #define _IPMI_SOL_H
00075
00076 #ifdef __cplusplus
00077 extern "C" {
00078 #endif
00079
00083 #define IPMI_SOL_BMC_TRANSMIT_QUEUE 0x01
00084 #define IPMI_SOL_BMC_RECEIVE_QUEUE 0x02
00085 #define IPMI_SOL_MANAGEMENT_CONSOLE_TRANSMIT_QUEUE 0x04
00086 #define IPMI_SOL_MANAGEMENT_CONSOLE_RECEIVE_QUEUE 0x08
00087
00088 #define IPMI_SOL_BMC_QUEUES (IPMI_SOL_BMC_TRANSMIT_QUEUE \
00089 | IPMI_SOL_BMC_RECEIVE_QUEUE)
00090
00091 #define IPMI_SOL_MANAGEMENT_CONSOLE_QUEUES \
00092 (IPMI_SOL_MANAGEMENT_CONSOLE_TRANSMIT_QUEUE \
00093 | IPMI_SOL_MANAGEMENT_CONSOLE_RECEIVE_QUEUE)
00094
00095 #define IPMI_SOL_ALL_QUEUES (IPMI_SOL_BMC_QUEUES \
00096 | IPMI_SOL_MANAGEMENT_CONSOLE_QUEUES)
00097
00098
00102 #define IPMI_SOL_BIT_RATE_DEFAULT 0x00
00103 #define IPMI_SOL_BIT_RATE_9600 0x06
00104 #define IPMI_SOL_BIT_RATE_19200 0x07
00105 #define IPMI_SOL_BIT_RATE_38400 0x08
00106 #define IPMI_SOL_BIT_RATE_57600 0x09
00107 #define IPMI_SOL_BIT_RATE_115200 0x0a
00108
00109
00113 typedef enum
00114 {
00115
00116 ipmi_sol_state_closed,
00117
00118
00119 ipmi_sol_state_connecting,
00120
00121
00122 ipmi_sol_state_connected,
00123
00124
00125
00126
00127 ipmi_sol_state_connected_ctu,
00128
00129
00130 ipmi_sol_state_closing
00131 } ipmi_sol_state;
00132
00133
00137 typedef enum
00138 {
00139 ipmi_sol_serial_alerts_fail = 0,
00140 ipmi_sol_serial_alerts_deferred = 1,
00141 ipmi_sol_serial_alerts_succeed = 2
00142 } ipmi_sol_serial_alert_behavior;
00143
00144
00148 typedef struct ipmi_sol_conn_s ipmi_sol_conn_t;
00149
00150
00179 typedef void (*ipmi_sol_connection_state_cb)(ipmi_sol_conn_t *conn,
00180 ipmi_sol_state state,
00181 int error,
00182 void *cb_data);
00183
00184
00206 typedef void (*ipmi_sol_transmit_complete_cb)(ipmi_sol_conn_t *conn,
00207 int error,
00208 void *cb_data);
00209
00210
00231 typedef int (*ipmi_sol_data_received_cb)(ipmi_sol_conn_t *conn,
00232 const void *buf,
00233 size_t count,
00234 void *cb_data);
00235
00236
00257 typedef void (*ipmi_sol_flush_complete_cb)(ipmi_sol_conn_t *conn,
00258 int error,
00259 int queue_selectors_flushed,
00260 void *cb_data);
00261
00262
00273 typedef void (*ipmi_sol_break_detected_cb)(ipmi_sol_conn_t *conn,
00274 void *cb_data);
00275
00276
00288 typedef void (*ipmi_sol_bmc_transmit_overrun_cb)(ipmi_sol_conn_t *conn,
00289 void *cb_data);
00290
00291
00302 int ipmi_sol_create(ipmi_con_t *ipmi,
00303 ipmi_sol_conn_t **sol_conn);
00304
00305
00306
00307
00308
00309
00310
00311
00321 int ipmi_sol_register_connection_state_callback(ipmi_sol_conn_t *conn,
00322 ipmi_sol_connection_state_cb cb,
00323 void *cb_data);
00324 int ipmi_sol_deregister_connection_state_callback(ipmi_sol_conn_t *conn,
00325 ipmi_sol_connection_state_cb cb,
00326 void *cb_data);
00327
00328 int ipmi_sol_register_data_received_callback(ipmi_sol_conn_t *conn,
00329 ipmi_sol_data_received_cb cb,
00330 void *cb_data);
00331 int ipmi_sol_deregister_data_received_callback(ipmi_sol_conn_t *conn,
00332 ipmi_sol_data_received_cb cb,
00333 void *cb_data);
00334
00335 int ipmi_sol_register_break_detected_callback(ipmi_sol_conn_t *conn,
00336 ipmi_sol_break_detected_cb cb,
00337 void *cb_data);
00338 int ipmi_sol_deregister_break_detected_callback(ipmi_sol_conn_t *conn,
00339 ipmi_sol_break_detected_cb cb,
00340 void *cb_data);
00341
00342 int ipmi_sol_register_bmc_transmit_overrun_callback(ipmi_sol_conn_t *conn,
00343 ipmi_sol_bmc_transmit_overrun_cb cb,
00344 void *cb_data);
00345 int ipmi_sol_deregister_bmc_transmit_overrun_callback(ipmi_sol_conn_t *conn,
00346 ipmi_sol_bmc_transmit_overrun_cb cb,
00347 void *cb_data);
00348
00349
00357 void ipmi_sol_set_ACK_timeout(ipmi_sol_conn_t *conn, int timeout_usec);
00358
00367 int ipmi_sol_get_ACK_timeout(ipmi_sol_conn_t *conn);
00368
00369
00376 void ipmi_sol_set_ACK_retries(ipmi_sol_conn_t *conn, int retries);
00377
00385 int ipmi_sol_get_ACK_retries(ipmi_sol_conn_t *conn);
00386
00395 int ipmi_sol_set_use_authentication(ipmi_sol_conn_t *conn,
00396 int use_authentication);
00397
00405 int ipmi_sol_get_use_authentication(ipmi_sol_conn_t *conn);
00406
00407
00416 int ipmi_sol_set_use_encryption(ipmi_sol_conn_t *conn, int use_encryption);
00417
00425 int ipmi_sol_get_use_encryption(ipmi_sol_conn_t *conn);
00426
00427
00436 int ipmi_sol_set_shared_serial_alert_behavior(ipmi_sol_conn_t *conn,
00437 ipmi_sol_serial_alert_behavior behavior);
00438
00446 ipmi_sol_serial_alert_behavior ipmi_sol_get_shared_serial_alert_behavior
00447 (ipmi_sol_conn_t *conn);
00448
00449
00459 int ipmi_sol_set_deassert_CTS_DCD_DSR_on_connect(ipmi_sol_conn_t *conn,
00460 int assert);
00461
00470 int ipmi_sol_get_deassert_CTS_DCD_DSR_on_connect(ipmi_sol_conn_t *conn);
00471
00472
00480 int ipmi_sol_set_bit_rate(ipmi_sol_conn_t *conn, unsigned char rate);
00481
00482
00489 unsigned char ipmi_sol_get_bit_rate(ipmi_sol_conn_t *conn);
00490
00491
00512 int ipmi_sol_open(ipmi_sol_conn_t *conn);
00513
00514
00535 int ipmi_sol_close(ipmi_sol_conn_t *conn);
00536
00537
00551 int ipmi_sol_force_close(ipmi_sol_conn_t *conn);
00552
00553
00562 int ipmi_sol_free(ipmi_sol_conn_t *conn);
00563
00564
00565
00566
00567
00568
00569
00591 int ipmi_sol_write(ipmi_sol_conn_t *conn,
00592 const void *buf,
00593 int count,
00594 ipmi_sol_transmit_complete_cb cb,
00595 void *cb_data);
00596
00597
00609 int ipmi_sol_release_nack(ipmi_sol_conn_t *conn);
00610
00611
00626 int ipmi_sol_send_break(ipmi_sol_conn_t *conn,
00627 ipmi_sol_transmit_complete_cb cb,
00628 void *cb_data);
00629
00630
00654 int ipmi_sol_set_CTS_assertable(ipmi_sol_conn_t *conn,
00655 int asserted,
00656 ipmi_sol_transmit_complete_cb cb,
00657 void *cb_data);
00658
00659
00675 int ipmi_sol_set_DCD_DSR_asserted(ipmi_sol_conn_t *conn,
00676 int asserted,
00677 ipmi_sol_transmit_complete_cb cb,
00678 void *cb_data);
00679
00680
00699 int ipmi_sol_set_RI_asserted(ipmi_sol_conn_t *conn,
00700 int asserted,
00701 ipmi_sol_transmit_complete_cb cb,
00702 void *cb_data);
00703
00704
00733 int ipmi_sol_flush(ipmi_sol_conn_t *conn,
00734 int queue_selectors,
00735 ipmi_sol_flush_complete_cb cb,
00736 void *cb_data);
00737
00738 #ifdef __cplusplus
00739 }
00740 #endif
00741
00742 #endif