csiostor uses function pointer casts to keep the csio_ln_ev state machine
hidden, but this causes warnings about control flow integrity (KCFI)
violations in clang-16 and higher:
drivers/scsi/csiostor/csio_lnode.c:1098:33: error: cast from 'void (*)(struct csio_lnode *, enum csio_ln_ev)' to 'csio_sm_state_t' (aka 'void (*)(void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
 1098 |         return (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_ready));
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/scsi/csiostor/csio_lnode.c:1369:29: error: cast from 'void (*)(struct csio_lnode *, enum csio_ln_ev)' to 'csio_sm_state_t' (aka 'void (*)(void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
 1369 |         if (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_uninit)) {
      |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/scsi/csiostor/csio_lnode.c:1373:29: error: cast from 'void (*)(struct csio_lnode *, enum csio_ln_ev)' to 'csio_sm_state_t' (aka 'void (*)(void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
 1373 |         if (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_ready)) {
      |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/scsi/csiostor/csio_lnode.c:1377:29: error: cast from 'void (*)(struct csio_lnode *, enum csio_ln_ev)' to 'csio_sm_state_t' (aka 'void (*)(void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
 1377 |         if (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_offline)) {
      |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Move the enum into a shared header so the correct types can be used without
the need for casts.
Fixes: a3667aaed569 ("[SCSI] csiostor: Chelsio FCoE offload driver")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20240213100518.457623-1-arnd@kernel.org
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
 
 #define csio_list_prev(elem)   (((struct list_head *)(elem))->prev)
 
 /* State machine */
-typedef void (*csio_sm_state_t)(void *, uint32_t);
+struct csio_lnode;
+
+/* State machine evets */
+enum csio_ln_ev {
+       CSIO_LNE_NONE = (uint32_t)0,
+       CSIO_LNE_LINKUP,
+       CSIO_LNE_FAB_INIT_DONE,
+       CSIO_LNE_LINK_DOWN,
+       CSIO_LNE_DOWN_LINK,
+       CSIO_LNE_LOGO,
+       CSIO_LNE_CLOSE,
+       CSIO_LNE_MAX_EVENT,
+};
+
+typedef void (*csio_sm_state_t)(struct csio_lnode *ln, enum csio_ln_ev evt);
 
 struct csio_sm {
        struct list_head        sm_list;
 static inline void
 csio_set_state(void *smp, void *state)
 {
-       ((struct csio_sm *)smp)->sm_state = (csio_sm_state_t)state;
+       ((struct csio_sm *)smp)->sm_state = state;
 }
 
 static inline void
 
 int
 csio_is_lnode_ready(struct csio_lnode *ln)
 {
-       return (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_ready));
+       return (csio_get_state(ln) == csio_lns_ready);
 }
 
 /*****************************************************************************/
 void
 csio_lnode_state_to_str(struct csio_lnode *ln, int8_t *str)
 {
-       if (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_uninit)) {
+       if (csio_get_state(ln) == csio_lns_uninit) {
                strcpy(str, "UNINIT");
                return;
        }
-       if (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_ready)) {
+       if (csio_get_state(ln) == csio_lns_ready) {
                strcpy(str, "READY");
                return;
        }
-       if (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_offline)) {
+       if (csio_get_state(ln) == csio_lns_offline) {
                strcpy(str, "OFFLINE");
                return;
        }
 
 extern int csio_fcoe_rnodes;
 extern int csio_fdmi_enable;
 
-/* State machine evets */
-enum csio_ln_ev {
-       CSIO_LNE_NONE = (uint32_t)0,
-       CSIO_LNE_LINKUP,
-       CSIO_LNE_FAB_INIT_DONE,
-       CSIO_LNE_LINK_DOWN,
-       CSIO_LNE_DOWN_LINK,
-       CSIO_LNE_LOGO,
-       CSIO_LNE_CLOSE,
-       CSIO_LNE_MAX_EVENT,
-};
-
-
 struct csio_fcf_info {
        struct list_head        list;
        uint8_t                 priority;