xref: /openbmc/linux/net/llc/llc_s_st.c (revision e5451c8f8330e03ad3cfa16048b4daf961af434f)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * llc_s_st.c - Defines SAP component state machine transitions.
31da177e4SLinus Torvalds  *
41da177e4SLinus Torvalds  * The followed transitions are SAP component state machine transitions
51da177e4SLinus Torvalds  * which are described in 802.2 LLC protocol standard document.
61da177e4SLinus Torvalds  *
71da177e4SLinus Torvalds  * Copyright (c) 1997 by Procom Technology, Inc.
81da177e4SLinus Torvalds  *		 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
91da177e4SLinus Torvalds  *
101da177e4SLinus Torvalds  * This program can be redistributed or modified under the terms of the
111da177e4SLinus Torvalds  * GNU General Public License as published by the Free Software Foundation.
121da177e4SLinus Torvalds  * This program is distributed without any warranty or implied warranty
131da177e4SLinus Torvalds  * of merchantability or fitness for a particular purpose.
141da177e4SLinus Torvalds  *
151da177e4SLinus Torvalds  * See the GNU General Public License for more details.
161da177e4SLinus Torvalds  */
171da177e4SLinus Torvalds #include <linux/types.h>
181da177e4SLinus Torvalds #include <net/llc_if.h>
191da177e4SLinus Torvalds #include <net/llc_s_ev.h>
201da177e4SLinus Torvalds #include <net/llc_s_ac.h>
211da177e4SLinus Torvalds #include <net/llc_s_st.h>
221da177e4SLinus Torvalds 
231da177e4SLinus Torvalds /* dummy last-transition indicator; common to all state transition groups
241da177e4SLinus Torvalds  * last entry for this state
251da177e4SLinus Torvalds  * all members are zeros, .bss zeroes it
261da177e4SLinus Torvalds  */
271da177e4SLinus Torvalds static struct llc_sap_state_trans llc_sap_state_trans_end;
281da177e4SLinus Torvalds 
291da177e4SLinus Torvalds /* state LLC_SAP_STATE_INACTIVE transition for
301da177e4SLinus Torvalds  * LLC_SAP_EV_ACTIVATION_REQ event
311da177e4SLinus Torvalds  */
32*22bbf5f3SJoe Perches static const llc_sap_action_t llc_sap_inactive_state_actions_1[] = {
331da177e4SLinus Torvalds 	[0] = llc_sap_action_report_status,
341da177e4SLinus Torvalds 	[1] = NULL,
351da177e4SLinus Torvalds };
361da177e4SLinus Torvalds 
371da177e4SLinus Torvalds static struct llc_sap_state_trans llc_sap_inactive_state_trans_1 = {
381da177e4SLinus Torvalds 	.ev =		llc_sap_ev_activation_req,
391da177e4SLinus Torvalds 	.next_state =	LLC_SAP_STATE_ACTIVE,
401da177e4SLinus Torvalds 	.ev_actions =	llc_sap_inactive_state_actions_1,
411da177e4SLinus Torvalds };
421da177e4SLinus Torvalds 
431da177e4SLinus Torvalds /* array of pointers; one to each transition */
441da177e4SLinus Torvalds static struct llc_sap_state_trans *llc_sap_inactive_state_transitions[] = {
451da177e4SLinus Torvalds 	[0] = &llc_sap_inactive_state_trans_1,
461da177e4SLinus Torvalds 	[1] = &llc_sap_state_trans_end,
471da177e4SLinus Torvalds };
481da177e4SLinus Torvalds 
491da177e4SLinus Torvalds /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_RX_UI event */
50*22bbf5f3SJoe Perches static const llc_sap_action_t llc_sap_active_state_actions_1[] = {
511da177e4SLinus Torvalds 	[0] = llc_sap_action_unitdata_ind,
521da177e4SLinus Torvalds 	[1] = NULL,
531da177e4SLinus Torvalds };
541da177e4SLinus Torvalds 
551da177e4SLinus Torvalds static struct llc_sap_state_trans llc_sap_active_state_trans_1 = {
561da177e4SLinus Torvalds 	.ev =		llc_sap_ev_rx_ui,
571da177e4SLinus Torvalds 	.next_state =	LLC_SAP_STATE_ACTIVE,
581da177e4SLinus Torvalds 	.ev_actions =	llc_sap_active_state_actions_1,
591da177e4SLinus Torvalds };
601da177e4SLinus Torvalds 
611da177e4SLinus Torvalds /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_UNITDATA_REQ event */
62*22bbf5f3SJoe Perches static const llc_sap_action_t llc_sap_active_state_actions_2[] = {
631da177e4SLinus Torvalds 	[0] = llc_sap_action_send_ui,
641da177e4SLinus Torvalds 	[1] = NULL,
651da177e4SLinus Torvalds };
661da177e4SLinus Torvalds 
671da177e4SLinus Torvalds static struct llc_sap_state_trans llc_sap_active_state_trans_2 = {
681da177e4SLinus Torvalds 	.ev =		llc_sap_ev_unitdata_req,
691da177e4SLinus Torvalds 	.next_state =	LLC_SAP_STATE_ACTIVE,
701da177e4SLinus Torvalds 	.ev_actions =	llc_sap_active_state_actions_2,
711da177e4SLinus Torvalds };
721da177e4SLinus Torvalds 
731da177e4SLinus Torvalds /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_XID_REQ event */
74*22bbf5f3SJoe Perches static const llc_sap_action_t llc_sap_active_state_actions_3[] = {
751da177e4SLinus Torvalds 	[0] = llc_sap_action_send_xid_c,
761da177e4SLinus Torvalds 	[1] = NULL,
771da177e4SLinus Torvalds };
781da177e4SLinus Torvalds 
791da177e4SLinus Torvalds static struct llc_sap_state_trans llc_sap_active_state_trans_3 = {
801da177e4SLinus Torvalds 	.ev =		llc_sap_ev_xid_req,
811da177e4SLinus Torvalds 	.next_state =	LLC_SAP_STATE_ACTIVE,
821da177e4SLinus Torvalds 	.ev_actions =	llc_sap_active_state_actions_3,
831da177e4SLinus Torvalds };
841da177e4SLinus Torvalds 
851da177e4SLinus Torvalds /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_RX_XID_C event */
86*22bbf5f3SJoe Perches static const llc_sap_action_t llc_sap_active_state_actions_4[] = {
871da177e4SLinus Torvalds 	[0] = llc_sap_action_send_xid_r,
881da177e4SLinus Torvalds 	[1] = NULL,
891da177e4SLinus Torvalds };
901da177e4SLinus Torvalds 
911da177e4SLinus Torvalds static struct llc_sap_state_trans llc_sap_active_state_trans_4 = {
921da177e4SLinus Torvalds 	.ev =		llc_sap_ev_rx_xid_c,
931da177e4SLinus Torvalds 	.next_state =	LLC_SAP_STATE_ACTIVE,
941da177e4SLinus Torvalds 	.ev_actions =	llc_sap_active_state_actions_4,
951da177e4SLinus Torvalds };
961da177e4SLinus Torvalds 
971da177e4SLinus Torvalds /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_RX_XID_R event */
98*22bbf5f3SJoe Perches static const llc_sap_action_t llc_sap_active_state_actions_5[] = {
991da177e4SLinus Torvalds 	[0] = llc_sap_action_xid_ind,
1001da177e4SLinus Torvalds 	[1] = NULL,
1011da177e4SLinus Torvalds };
1021da177e4SLinus Torvalds 
1031da177e4SLinus Torvalds static struct llc_sap_state_trans llc_sap_active_state_trans_5 = {
1041da177e4SLinus Torvalds 	.ev =		llc_sap_ev_rx_xid_r,
1051da177e4SLinus Torvalds 	.next_state =	LLC_SAP_STATE_ACTIVE,
1061da177e4SLinus Torvalds 	.ev_actions =	llc_sap_active_state_actions_5,
1071da177e4SLinus Torvalds };
1081da177e4SLinus Torvalds 
1091da177e4SLinus Torvalds /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_TEST_REQ event */
110*22bbf5f3SJoe Perches static const llc_sap_action_t llc_sap_active_state_actions_6[] = {
1111da177e4SLinus Torvalds 	[0] = llc_sap_action_send_test_c,
1121da177e4SLinus Torvalds 	[1] = NULL,
1131da177e4SLinus Torvalds };
1141da177e4SLinus Torvalds 
1151da177e4SLinus Torvalds static struct llc_sap_state_trans llc_sap_active_state_trans_6 = {
1161da177e4SLinus Torvalds 	.ev =		llc_sap_ev_test_req,
1171da177e4SLinus Torvalds 	.next_state =	LLC_SAP_STATE_ACTIVE,
1181da177e4SLinus Torvalds 	.ev_actions =	llc_sap_active_state_actions_6,
1191da177e4SLinus Torvalds };
1201da177e4SLinus Torvalds 
1211da177e4SLinus Torvalds /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_RX_TEST_C event */
122*22bbf5f3SJoe Perches static const llc_sap_action_t llc_sap_active_state_actions_7[] = {
1231da177e4SLinus Torvalds 	[0] = llc_sap_action_send_test_r,
1241da177e4SLinus Torvalds 	[1] = NULL,
1251da177e4SLinus Torvalds };
1261da177e4SLinus Torvalds 
1271da177e4SLinus Torvalds static struct llc_sap_state_trans llc_sap_active_state_trans_7 = {
1281da177e4SLinus Torvalds 	.ev =		llc_sap_ev_rx_test_c,
1291da177e4SLinus Torvalds 	.next_state =	LLC_SAP_STATE_ACTIVE,
1301da177e4SLinus Torvalds 	.ev_actions =	llc_sap_active_state_actions_7
1311da177e4SLinus Torvalds };
1321da177e4SLinus Torvalds 
1331da177e4SLinus Torvalds /* state LLC_SAP_STATE_ACTIVE transition for LLC_SAP_EV_RX_TEST_R event */
134*22bbf5f3SJoe Perches static const llc_sap_action_t llc_sap_active_state_actions_8[] = {
1351da177e4SLinus Torvalds 	[0] = llc_sap_action_test_ind,
1361da177e4SLinus Torvalds 	[1] = NULL,
1371da177e4SLinus Torvalds };
1381da177e4SLinus Torvalds 
1391da177e4SLinus Torvalds static struct llc_sap_state_trans llc_sap_active_state_trans_8 = {
1401da177e4SLinus Torvalds 	.ev =		llc_sap_ev_rx_test_r,
1411da177e4SLinus Torvalds 	.next_state =	LLC_SAP_STATE_ACTIVE,
1421da177e4SLinus Torvalds 	.ev_actions =	llc_sap_active_state_actions_8,
1431da177e4SLinus Torvalds };
1441da177e4SLinus Torvalds 
1451da177e4SLinus Torvalds /* state LLC_SAP_STATE_ACTIVE transition for
1461da177e4SLinus Torvalds  * LLC_SAP_EV_DEACTIVATION_REQ event
1471da177e4SLinus Torvalds  */
148*22bbf5f3SJoe Perches static const llc_sap_action_t llc_sap_active_state_actions_9[] = {
1491da177e4SLinus Torvalds 	[0] = llc_sap_action_report_status,
1501da177e4SLinus Torvalds 	[1] = NULL,
1511da177e4SLinus Torvalds };
1521da177e4SLinus Torvalds 
1531da177e4SLinus Torvalds static struct llc_sap_state_trans llc_sap_active_state_trans_9 = {
1541da177e4SLinus Torvalds 	.ev =		llc_sap_ev_deactivation_req,
1551da177e4SLinus Torvalds 	.next_state =	LLC_SAP_STATE_INACTIVE,
1561da177e4SLinus Torvalds 	.ev_actions =	llc_sap_active_state_actions_9
1571da177e4SLinus Torvalds };
1581da177e4SLinus Torvalds 
1591da177e4SLinus Torvalds /* array of pointers; one to each transition */
1601da177e4SLinus Torvalds static struct llc_sap_state_trans *llc_sap_active_state_transitions[] = {
1611da177e4SLinus Torvalds 	[0] = &llc_sap_active_state_trans_2,
1621da177e4SLinus Torvalds 	[1] = &llc_sap_active_state_trans_1,
1631da177e4SLinus Torvalds 	[2] = &llc_sap_active_state_trans_3,
1641da177e4SLinus Torvalds 	[3] = &llc_sap_active_state_trans_4,
1651da177e4SLinus Torvalds 	[4] = &llc_sap_active_state_trans_5,
1661da177e4SLinus Torvalds 	[5] = &llc_sap_active_state_trans_6,
1671da177e4SLinus Torvalds 	[6] = &llc_sap_active_state_trans_7,
1681da177e4SLinus Torvalds 	[7] = &llc_sap_active_state_trans_8,
1691da177e4SLinus Torvalds 	[8] = &llc_sap_active_state_trans_9,
1701da177e4SLinus Torvalds 	[9] = &llc_sap_state_trans_end,
1711da177e4SLinus Torvalds };
1721da177e4SLinus Torvalds 
1731da177e4SLinus Torvalds /* SAP state transition table */
1741da177e4SLinus Torvalds struct llc_sap_state llc_sap_state_table[LLC_NR_SAP_STATES] = {
1751da177e4SLinus Torvalds 	[LLC_SAP_STATE_INACTIVE - 1] = {
1761da177e4SLinus Torvalds 		.curr_state	= LLC_SAP_STATE_INACTIVE,
1771da177e4SLinus Torvalds 		.transitions	= llc_sap_inactive_state_transitions,
1781da177e4SLinus Torvalds 	},
1791da177e4SLinus Torvalds 	[LLC_SAP_STATE_ACTIVE - 1] = {
1801da177e4SLinus Torvalds 		.curr_state	= LLC_SAP_STATE_ACTIVE,
1811da177e4SLinus Torvalds 		.transitions	= llc_sap_active_state_transitions,
1821da177e4SLinus Torvalds 	},
1831da177e4SLinus Torvalds };
184