esp8266/esp_mphal: Add ets_esf_free_bufs(), etc. functions.

Returning free number of various WiFi driver packet buffers.
This commit is contained in:
Paul Sokolovsky 2016-05-03 00:18:14 +03:00
parent 7b7c99fec1
commit 3d830415bc
2 changed files with 25 additions and 0 deletions

View File

@ -234,3 +234,25 @@ void mp_hal_pin_config_od(mp_hal_pin_obj_t pin_id) {
GPIO_REG_READ(GPIO_ENABLE_ADDRESS) | (1 << pin->phys_port));
ETS_GPIO_INTR_ENABLE();
}
// Get pointer to esf_buf bookkeeping structure
void *ets_get_esf_buf_ctlblk(void) {
// Get literal ptr before start of esf_rx_buf_alloc func
extern void *esf_rx_buf_alloc();
return ((void**)esf_rx_buf_alloc)[-1];
}
// Get number of esf_buf free buffers of given type, as encoded by index
// idx 0 corresponds to buf types 1, 2; 1 - 4; 2 - 5; 3 - 7; 4 - 8
// Only following buf types appear to be used:
// 1 - tx buffer, 5 - management frame tx buffer; 8 - rx buffer
int ets_esf_free_bufs(int idx) {
uint32_t *p = ets_get_esf_buf_ctlblk();
uint32_t *b = (uint32_t*)p[idx];
int cnt = 0;
while (b) {
b = (uint32_t*)b[0x20 / 4];
cnt++;
}
return cnt;
}

View File

@ -77,4 +77,7 @@ void mp_hal_pin_config_od(mp_hal_pin_obj_t pin);
#define mp_hal_pin_read(p) pin_get(p)
#define mp_hal_pin_write(p, v) pin_set((p), (v))
void *ets_get_esf_buf_ctlblk(void);
int ets_esf_free_bufs(int idx);
#endif // _INCLUDED_MPHAL_H_