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 <dfs_fs.h>
#include "list.h"
#include "mmcsd_core.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_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
{
@ -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_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;
}
@ -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)
{
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)
{
rt_device_unregister(&blk_dev->dev);
list_remove(&blk_dev->list);
rt_list_remove(&blk_dev->list);
rt_free(blk_dev);
}
}
@ -440,5 +439,5 @@ void rt_mmcsd_blk_remove(struct rt_mmcsd_card *card)
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_cmd.h"
#include "list.h"
#ifndef RT_SDIO_STACK_SIZE
#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;
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;
}
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))
{
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)
{
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;
if (sdio_match_card(card, id))
@ -1284,9 +1283,9 @@ rt_int32_t sdio_register_driver(struct rt_sdio_driver *driver)
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);
if (card != RT_NULL)
@ -1305,11 +1304,11 @@ rt_int32_t sdio_unregister_driver(struct rt_sdio_driver *driver)
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)
{
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)
{
sd = RT_NULL;
@ -1322,13 +1321,13 @@ rt_int32_t sdio_unregister_driver(struct rt_sdio_driver *driver)
return -RT_ERROR;
}
if (!list_isempty(&sdio_cards))
if (!rt_list_isempty(&sdio_cards))
{
card = sdio_match_driver(driver->id);
if (card != RT_NULL)
{
driver->remove(card);
list_remove(&sd->list);
rt_list_remove(&sd->list);
rt_free(sd);
}
}
@ -1339,7 +1338,7 @@ rt_int32_t sdio_unregister_driver(struct rt_sdio_driver *driver)
void rt_sdio_init(void)
{
list_init(&sdio_cards);
list_init(&sdio_drivers);
rt_list_init(&sdio_cards);
rt_list_init(&sdio_drivers);
}