]> git.sur5r.net Git - freertos/blob - FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/RX/ether_callback.c
Sync FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP with the version in GitHub at (23665258ca...
[freertos] / FreeRTOS-Plus / Source / FreeRTOS-Plus-TCP / portable / NetworkInterface / RX / ether_callback.c
1 /***********************************************************************************************************************\r
2 * DISCLAIMER\r
3 * This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. No\r
4 * other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all\r
5 * applicable laws, including copyright laws.\r
6 * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING\r
7 * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY,\r
8 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. TO THE MAXIMUM\r
9 * EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES\r
10 * SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS\r
11 * SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
12 * Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of\r
13 * this software. By using this software, you agree to the additional terms and conditions found by accessing the\r
14 * following link:\r
15 * http://www.renesas.com/disclaimer\r
16 *\r
17 * Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved.\r
18 ***********************************************************************************************************************/\r
19 /***********************************************************************************************************************\r
20 * File Name    : ether_callback.c\r
21 * Version      : ----\r
22 * Description  : This module solves all the world's problems\r
23 ***********************************************************************************************************************/\r
24 /**********************************************************************************************************************\r
25 * History : DD.MM.YYYY Version  Description\r
26 *         : 05.01.2015 ----     Clean up source code.\r
27 ***********************************************************************************************************************/\r
28 \r
29 /***********************************************************************************************************************\r
30 Includes   <System Includes> , "Project Includes"\r
31 ***********************************************************************************************************************/\r
32 #include "r_ether_rx_if.h"\r
33 \r
34 /***********************************************************************************************************************\r
35 Private global variables and functions\r
36 ***********************************************************************************************************************/\r
37 int32_t callback_ether_regist(void);\r
38 void callback_ether(void * pparam);\r
39 static void callback_wakeon_lan(uint32_t channel);\r
40 static void callback_link_on(uint32_t channel);\r
41 static void callback_link_off(uint32_t channel);\r
42 \r
43 volatile uint8_t  pause_enable = ETHER_FLAG_OFF;\r
44 volatile uint8_t  magic_packet_detect[ETHER_CHANNEL_MAX];\r
45 volatile uint8_t  link_detect[ETHER_CHANNEL_MAX];\r
46 \r
47 void EINT_Trig_isr(void *);\r
48 \r
49 /*\r
50  * When that Link Status changes, the following function will be called:\r
51  */\r
52 void prvLinkStatusChange( BaseType_t xStatus );\r
53 \r
54 /***********************************************************************************************************************\r
55 * Function Name: callback_ether\r
56 * Description  : Regist of callback function\r
57 * Arguments    : -\r
58 * Return Value : 0: success, -1:failed\r
59 ***********************************************************************************************************************/\r
60 int32_t callback_ether_regist(void)\r
61 {\r
62     ether_param_t   param;\r
63     ether_cb_t      cb_func;\r
64 \r
65     int32_t         ret;\r
66 \r
67     /* Set the callback function (LAN cable connect/disconnect event) */\r
68     cb_func.pcb_func     = &callback_ether;\r
69     param.ether_callback = cb_func;\r
70     ret = R_ETHER_Control(CONTROL_SET_CALLBACK, param);\r
71     if (ETHER_SUCCESS != ret)\r
72     {\r
73         return -1;\r
74     }\r
75 \r
76     /* Set the callback function (Ether interrupt event) */\r
77     cb_func.pcb_int_hnd     = &EINT_Trig_isr;\r
78     param.ether_callback = cb_func;\r
79     ret = R_ETHER_Control(CONTROL_SET_INT_HANDLER, param);\r
80     if (ETHER_SUCCESS != ret)\r
81     {\r
82         return -1;\r
83     }\r
84     return 0;\r
85 } /* End of function callback_ether_regist() */\r
86 \r
87 /***********************************************************************************************************************\r
88 * Function Name: callback_ether\r
89 * Description  : Sample of the callback function\r
90 * Arguments    : pparam -\r
91 *\r
92 * Return Value : none\r
93 ***********************************************************************************************************************/\r
94 void callback_ether(void * pparam)\r
95 {\r
96     ether_cb_arg_t    * pdecode;\r
97     uint32_t            channel;\r
98 \r
99     pdecode = (ether_cb_arg_t *)pparam;\r
100     channel = pdecode->channel;                             /* Get Ethernet channel number */\r
101 \r
102     switch (pdecode->event_id)\r
103     {\r
104         /* Callback function that notifies user to have detected magic packet. */\r
105         case ETHER_CB_EVENT_ID_WAKEON_LAN:\r
106             callback_wakeon_lan(channel);\r
107             break;\r
108 \r
109         /* Callback function that notifies user to have become Link up. */\r
110         case ETHER_CB_EVENT_ID_LINK_ON:\r
111             callback_link_on(channel);\r
112             break;\r
113 \r
114         /* Callback function that notifies user to have become Link down. */\r
115         case ETHER_CB_EVENT_ID_LINK_OFF:\r
116             callback_link_off(channel);\r
117             break;\r
118 \r
119         default:\r
120             break;\r
121     }\r
122 } /* End of function callback_ether() */\r
123 \r
124 /***********************************************************************************************************************\r
125 * Function Name: callback_wakeon_lan\r
126 * Description  :\r
127 * Arguments    : channel -\r
128 *                    Ethernet channel number\r
129 * Return Value : none\r
130 ***********************************************************************************************************************/\r
131 static void callback_wakeon_lan(uint32_t channel)\r
132 {\r
133     if (ETHER_CHANNEL_MAX > channel)\r
134     {\r
135         magic_packet_detect[channel] = 1;\r
136 \r
137         /* Please add necessary processing when magic packet is detected.  */\r
138     }\r
139 } /* End of function callback_wakeon_lan() */\r
140 \r
141 /***********************************************************************************************************************\r
142 * Function Name: callback_link_on\r
143 * Description  :\r
144 * Arguments    : channel -\r
145 *                    Ethernet channel number\r
146 * Return Value : none\r
147 ***********************************************************************************************************************/\r
148 static void callback_link_on(uint32_t channel)\r
149 {\r
150     if (ETHER_CHANNEL_MAX > channel)\r
151     {\r
152         link_detect[channel] = ETHER_FLAG_ON_LINK_ON;\r
153 \r
154         /* Please add necessary processing when becoming Link up. */\r
155                 prvLinkStatusChange( 1 );\r
156     }\r
157 } /* End of function callback_link_on() */\r
158 \r
159 /***********************************************************************************************************************\r
160 * Function Name: callback_link_off\r
161 * Description  :\r
162 * Arguments    : channel -\r
163 *                    Ethernet channel number\r
164 * Return Value : none\r
165 ***********************************************************************************************************************/\r
166 static void callback_link_off(uint32_t channel)\r
167 {\r
168     if (ETHER_CHANNEL_MAX > channel)\r
169     {\r
170         link_detect[channel] = ETHER_FLAG_ON_LINK_OFF;\r
171 \r
172         /* Please add necessary processing when becoming Link down. */\r
173                 prvLinkStatusChange( 0 );\r
174     }\r
175 } /* End of function ether_cb_link_off() */\r
176 \r
177 /* End of File */\r