Commit d0371926 authored by Jean-Claude BAU's avatar Jean-Claude BAU

Manage the field 'shmemState' in HAL

parent 8f169740
Subproject commit 580dcb7d27f4d12e54c33ff2d0e523e4cf4e5d49 Subproject commit d7dd6c5942d7fa17c4c2f496ef4064c1b33d7a4b
...@@ -310,6 +310,12 @@ int main(int argc, char *argv[]) ...@@ -310,6 +310,12 @@ int main(int argc, char *argv[])
// Check main timers and call callback if timeout expires // Check main timers and call callback if timeout expires
timer_scan(_timerParameters,MAIN_TIMER_COUNT); timer_scan(_timerParameters,MAIN_TIMER_COUNT);
if ( hal_shmem->shmemState== HAL_SHMEM_STATE_INITITALIZING) {
// Check if all ports have been initialized
if ( hal_port_all_ports_initialized())
hal_shmem->shmemState= HAL_SHMEM_STATE_INITITALIZED;
}
} }
hal_shutdown(); hal_shutdown();
......
...@@ -244,7 +244,9 @@ int hal_port_shmem_init(char *logfilename) ...@@ -244,7 +244,9 @@ int hal_port_shmem_init(char *logfilename)
return -1; return -1;
} }
hal_shmem = wrs_shm_alloc(hal_shmem_hdr, sizeof(*hal_shmem)); hal_shmem = wrs_shm_alloc(hal_shmem_hdr, sizeof(*hal_shmem));
halPorts.ports = wrs_shm_alloc(hal_shmem_hdr,
hal_shmem->shmemState= HAL_SHMEM_STATE_NOT_INITITALIZED;
halPorts.ports = wrs_shm_alloc(hal_shmem_hdr,
sizeof(struct hal_port_state) sizeof(struct hal_port_state)
* HAL_MAX_PORTS); * HAL_MAX_PORTS);
if (!hal_shmem || !halPorts.ports) { if (!hal_shmem || !halPorts.ports) {
...@@ -276,6 +278,9 @@ int hal_port_shmem_init(char *logfilename) ...@@ -276,6 +278,9 @@ int hal_port_shmem_init(char *logfilename)
} else } else
hal_shmem->read_sfp_diag = READ_SFP_DIAG_DISABLE; hal_shmem->read_sfp_diag = READ_SFP_DIAG_DISABLE;
hal_shmem->shmemState= HAL_SHMEM_STATE_INITITALIZING;
hal_shmem_hdr->version = HAL_SHMEM_VERSION; hal_shmem_hdr->version = HAL_SHMEM_VERSION;
/* Release processes waiting for HAL's to fill shm with correct data /* Release processes waiting for HAL's to fill shm with correct data
When shm is opened successfully data in shm is still not populated! When shm is opened successfully data in shm is still not populated!
...@@ -704,6 +709,21 @@ int hal_port_reset(const char *port_name) ...@@ -704,6 +709,21 @@ int hal_port_reset(const char *port_name)
return 0; return 0;
} }
// Check if all ports are initialized
int hal_port_all_ports_initialized(void) {
struct hal_port_state *ps=halPorts.ports;
int i;
for (i = 0; i < HAL_MAX_PORTS; i++) {
if ( ps->in_use && ps->portStates.state==HAL_PORT_STATE_INIT ) {
// This port has not finished its initialization state
return 0;
}
ps++;
}
return 1;
}
void hal_port_update_info(char *iface_name, int mode, int synchronized){ void hal_port_update_info(char *iface_name, int mode, int synchronized){
int i; int i;
......
...@@ -43,6 +43,7 @@ extern int hal_port_start_lock(const char *port_name, int priority); ...@@ -43,6 +43,7 @@ extern int hal_port_start_lock(const char *port_name, int priority);
extern int hal_port_enable_tracking(const char *port_name); extern int hal_port_enable_tracking(const char *port_name);
extern int hal_port_check_lock(const struct hal_port_state *ps); extern int hal_port_check_lock(const struct hal_port_state *ps);
extern int hal_port_check_lock_by_name(const char *port_name); extern int hal_port_check_lock_by_name(const char *port_name);
extern int hal_port_all_ports_initialized(void);
extern int hal_port_reset(const char *port_name); extern int hal_port_reset(const char *port_name);
extern int hal_port_pshifter_busy(void); extern int hal_port_pshifter_busy(void);
extern void hal_port_update_info(char *iface_name, int mode, int synchronized); extern void hal_port_update_info(char *iface_name, int mode, int synchronized);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment