use rt_list in rtservice.h

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2091 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
luohui2320@gmail.com 2012-04-17 15:18:50 +00:00
parent 5b80e102e0
commit 06d45f0c42
3 changed files with 17 additions and 125 deletions

View File

@ -14,7 +14,6 @@
#include <rtthread.h> #include <rtthread.h>
#include <dfs_fs.h> #include <dfs_fs.h>
#include "list.h"
#include "mmcsd_core.h" #include "mmcsd_core.h"
#include "mmcsd_cmd.h" #include "mmcsd_cmd.h"
@ -359,7 +358,7 @@ rt_int32_t rt_mmcsd_blk_probe(struct rt_mmcsd_card *card)
rt_device_register(&blk_dev->dev, dname, rt_device_register(&blk_dev->dev, dname,
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_REMOVABLE | RT_DEVICE_FLAG_STANDALONE); RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_REMOVABLE | RT_DEVICE_FLAG_STANDALONE);
list_insert_after(&blk_devices, &blk_dev->list); rt_list_insert_after(&blk_devices, &blk_dev->list);
} }
else else
{ {
@ -396,7 +395,7 @@ rt_int32_t rt_mmcsd_blk_probe(struct rt_mmcsd_card *card)
rt_device_register(&blk_dev->dev, "sd0", rt_device_register(&blk_dev->dev, "sd0",
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_REMOVABLE | RT_DEVICE_FLAG_STANDALONE); RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_REMOVABLE | RT_DEVICE_FLAG_STANDALONE);
list_insert_after(&blk_devices, &blk_dev->list); rt_list_insert_after(&blk_devices, &blk_dev->list);
break; break;
} }
@ -428,11 +427,11 @@ void rt_mmcsd_blk_remove(struct rt_mmcsd_card *card)
for (l = (&blk_devices)->next; l != &blk_devices; l = l->next) for (l = (&blk_devices)->next; l != &blk_devices; l = l->next)
{ {
blk_dev = (struct mmcsd_blk_device *)list_entry(l, struct mmcsd_blk_device, list); blk_dev = (struct mmcsd_blk_device *)rt_list_entry(l, struct mmcsd_blk_device, list);
if (blk_dev->card == card) if (blk_dev->card == card)
{ {
rt_device_unregister(&blk_dev->dev); rt_device_unregister(&blk_dev->dev);
list_remove(&blk_dev->list); rt_list_remove(&blk_dev->list);
rt_free(blk_dev); rt_free(blk_dev);
} }
} }
@ -440,5 +439,5 @@ void rt_mmcsd_blk_remove(struct rt_mmcsd_card *card)
void rt_mmcsd_blk_init(void) void rt_mmcsd_blk_init(void)
{ {
list_init(&blk_devices); rt_list_init(&blk_devices);
} }

View File

@ -1,106 +0,0 @@
/*
* File : list.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2009, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
*
* Change Logs:
* Date Author Notes
* 2011-01-15 weety copy from kservice APIs
*/
#ifndef __RT_LIST_H__
#define __RT_LIST_H__
#include <rtthread.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @addtogroup list
*/
/*@{*/
/**
* @brief initialize a list
*
* @param l list to be initialized
*/
rt_inline void list_init(rt_list_t *l)
{
l->next = l->prev = l;
}
/**
* @brief insert a node after a list
*
* @param l list to insert it
* @param n new node to be inserted
*/
rt_inline void list_insert_after(rt_list_t *l, rt_list_t *n)
{
l->next->prev = n;
n->next = l->next;
l->next = n;
n->prev = l;
}
/**
* @brief insert a node before a list
*
* @param n new node to be inserted
* @param l list to insert it
*/
rt_inline void list_insert_before(rt_list_t *l, rt_list_t *n)
{
l->prev->next = n;
n->prev = l->prev;
l->prev = n;
n->next = l;
}
/**
* @brief remove node from list.
* @param n the node to remove from the list.
*/
rt_inline void list_remove(rt_list_t *n)
{
n->next->prev = n->prev;
n->prev->next = n->next;
n->next = n->prev = n;
}
/**
* @brief tests whether a list is empty
* @param l the list to test.
*/
rt_inline int list_isempty(const rt_list_t *l)
{
return l->next == l;
}
/**
* @brief get the struct for this entry
* @param node the entry point
* @param type the type of structure
* @param member the name of list in structure
*/
#define list_entry(node, type, member) \
((type *)((char *)(node) - (unsigned long)(&((type *)0)->member)))
/*@}*/
#ifdef __cplusplus
}
#endif
#endif

View File

@ -14,7 +14,6 @@
#include "mmcsd_core.h" #include "mmcsd_core.h"
#include "mmcsd_cmd.h" #include "mmcsd_cmd.h"
#include "list.h"
#ifndef RT_SDIO_STACK_SIZE #ifndef RT_SDIO_STACK_SIZE
#define RT_SDIO_STACK_SIZE 512 #define RT_SDIO_STACK_SIZE 512
@ -743,16 +742,16 @@ static rt_int32_t sdio_register_card(struct rt_mmcsd_card *card)
} }
sc->card = card; sc->card = card;
list_insert_after(&sdio_cards, &sc->list); rt_list_insert_after(&sdio_cards, &sc->list);
if (list_isempty(&sdio_drivers)) if (rt_list_isempty(&sdio_drivers))
{ {
goto out; goto out;
} }
for (l = (&sdio_drivers)->next; l != &sdio_drivers; l = l->next) for (l = (&sdio_drivers)->next; l != &sdio_drivers; l = l->next)
{ {
sd = (struct sdio_driver *)list_entry(l, struct sdio_driver, list); sd = (struct sdio_driver *)rt_list_entry(l, struct sdio_driver, list);
if (sdio_match_card(card, sd->drv->id)) if (sdio_match_card(card, sd->drv->id))
{ {
sd->drv->probe(card); sd->drv->probe(card);
@ -1260,7 +1259,7 @@ static struct rt_mmcsd_card *sdio_match_driver(struct rt_sdio_device_id *id)
for (l = (&sdio_cards)->next; l != &sdio_cards; l = l->next) for (l = (&sdio_cards)->next; l != &sdio_cards; l = l->next)
{ {
sc = (struct sdio_card *)list_entry(l, struct sdio_card, list); sc = (struct sdio_card *)rt_list_entry(l, struct sdio_card, list);
card = sc->card; card = sc->card;
if (sdio_match_card(card, id)) if (sdio_match_card(card, id))
@ -1284,9 +1283,9 @@ rt_int32_t sdio_register_driver(struct rt_sdio_driver *driver)
return -RT_ENOMEM; return -RT_ENOMEM;
} }
list_insert_after(&sdio_drivers, &sd->list); rt_list_insert_after(&sdio_drivers, &sd->list);
if (!list_isempty(&sdio_cards)) if (!rt_list_isempty(&sdio_cards))
{ {
card = sdio_match_driver(driver->id); card = sdio_match_driver(driver->id);
if (card != RT_NULL) if (card != RT_NULL)
@ -1305,11 +1304,11 @@ rt_int32_t sdio_unregister_driver(struct rt_sdio_driver *driver)
struct rt_mmcsd_card *card; struct rt_mmcsd_card *card;
list_insert_after(&sdio_drivers, &sd->list); rt_list_insert_after(&sdio_drivers, &sd->list);
for (l = (&sdio_drivers)->next; l != &sdio_drivers; l = l->next) for (l = (&sdio_drivers)->next; l != &sdio_drivers; l = l->next)
{ {
sd = (struct sdio_driver *)list_entry(l, struct sdio_driver, list); sd = (struct sdio_driver *)rt_list_entry(l, struct sdio_driver, list);
if (sd->drv != driver) if (sd->drv != driver)
{ {
sd = RT_NULL; sd = RT_NULL;
@ -1322,13 +1321,13 @@ rt_int32_t sdio_unregister_driver(struct rt_sdio_driver *driver)
return -RT_ERROR; return -RT_ERROR;
} }
if (!list_isempty(&sdio_cards)) if (!rt_list_isempty(&sdio_cards))
{ {
card = sdio_match_driver(driver->id); card = sdio_match_driver(driver->id);
if (card != RT_NULL) if (card != RT_NULL)
{ {
driver->remove(card); driver->remove(card);
list_remove(&sd->list); rt_list_remove(&sd->list);
rt_free(sd); rt_free(sd);
} }
} }
@ -1339,7 +1338,7 @@ rt_int32_t sdio_unregister_driver(struct rt_sdio_driver *driver)
void rt_sdio_init(void) void rt_sdio_init(void)
{ {
list_init(&sdio_cards); rt_list_init(&sdio_cards);
list_init(&sdio_drivers); rt_list_init(&sdio_drivers);
} }