Embedded GPLv2 license in drivers
This commit is contained in:
parent
90ac1c9ba4
commit
621fbdb90c
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, Shanghai Real-Thread Technology Co., Ltd
|
* COPYRIGHT (C) 2012, Shanghai Real-Thread Technology Co., Ltd
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -1,19 +1,30 @@
|
|||||||
#ifndef __SD_H__
|
|
||||||
#define __SD_H__
|
|
||||||
/*
|
/*
|
||||||
* File : sd.h
|
* File : sd.h
|
||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2011-07-25 weety first version
|
* 2011-07-25 weety first version
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef __SD_H__
|
||||||
|
#define __SD_H__
|
||||||
|
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
#include <drivers/mmcsd_host.h>
|
#include <drivers/mmcsd_host.h>
|
||||||
|
|
||||||
|
@ -3,20 +3,28 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2012-01-15 weety first version
|
* 2012-01-15 weety first version
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef __SDIO_H__
|
#ifndef __SDIO_H__
|
||||||
#define __SDIO_H__
|
#define __SDIO_H__
|
||||||
|
|
||||||
|
|
||||||
#include <rtthread.h>
|
#include <rtthread.h>
|
||||||
#include <drivers/mmcsd_host.h>
|
#include <drivers/mmcsd_host.h>
|
||||||
#include <drivers/mmcsd_card.h>
|
#include <drivers/mmcsd_card.h>
|
||||||
@ -124,7 +132,6 @@ extern "C" {
|
|||||||
|
|
||||||
#define SDIO_REG_FBR_BLKSIZE 0x10 /* block size (2 bytes) */
|
#define SDIO_REG_FBR_BLKSIZE 0x10 /* block size (2 bytes) */
|
||||||
|
|
||||||
|
|
||||||
/* SDIO CIS Tuple code */
|
/* SDIO CIS Tuple code */
|
||||||
#define CISTPL_NULL 0x00
|
#define CISTPL_NULL 0x00
|
||||||
#define CISTPL_CHECKSUM 0x10
|
#define CISTPL_CHECKSUM 0x10
|
||||||
@ -142,55 +149,85 @@ extern "C" {
|
|||||||
#define SDIO_ANY_MAN_ID 0xffff
|
#define SDIO_ANY_MAN_ID 0xffff
|
||||||
#define SDIO_ANY_PROD_ID 0xffff
|
#define SDIO_ANY_PROD_ID 0xffff
|
||||||
|
|
||||||
struct rt_sdio_device_id {
|
struct rt_sdio_device_id
|
||||||
|
{
|
||||||
rt_uint8_t func_code;
|
rt_uint8_t func_code;
|
||||||
rt_uint16_t manufacturer;
|
rt_uint16_t manufacturer;
|
||||||
rt_uint16_t product;
|
rt_uint16_t product;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct rt_sdio_driver {
|
struct rt_sdio_driver
|
||||||
|
{
|
||||||
char *name;
|
char *name;
|
||||||
rt_int32_t (*probe)(struct rt_mmcsd_card *card);
|
rt_int32_t (*probe)(struct rt_mmcsd_card *card);
|
||||||
rt_int32_t (*remove)(struct rt_mmcsd_card *card);
|
rt_int32_t (*remove)(struct rt_mmcsd_card *card);
|
||||||
struct rt_sdio_device_id *id;
|
struct rt_sdio_device_id *id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
rt_int32_t sdio_io_send_op_cond(struct rt_mmcsd_host *host,
|
||||||
|
rt_uint32_t ocr,
|
||||||
rt_int32_t sdio_io_send_op_cond(struct rt_mmcsd_host *host, rt_uint32_t ocr, rt_uint32_t
|
rt_uint32_t *cmd5_resp);
|
||||||
*cmd5_resp);
|
rt_int32_t sdio_io_rw_direct(struct rt_mmcsd_card *card,
|
||||||
rt_int32_t sdio_io_rw_direct(struct rt_mmcsd_card *card, rt_int32_t rw, rt_uint32_t fn,
|
rt_int32_t rw,
|
||||||
rt_uint32_t reg_addr, rt_uint8_t *pdata, rt_uint8_t raw);
|
rt_uint32_t fn,
|
||||||
rt_int32_t sdio_io_rw_extended(struct rt_mmcsd_card *card, rt_int32_t rw, rt_uint32_t fn,
|
rt_uint32_t reg_addr,
|
||||||
rt_uint32_t addr, rt_int32_t op_code, rt_uint8_t *buf, rt_uint32_t blocks, rt_uint32_t blksize);
|
rt_uint8_t *pdata,
|
||||||
|
rt_uint8_t raw);
|
||||||
|
rt_int32_t sdio_io_rw_extended(struct rt_mmcsd_card *card,
|
||||||
|
rt_int32_t rw,
|
||||||
|
rt_uint32_t fn,
|
||||||
|
rt_uint32_t addr,
|
||||||
|
rt_int32_t op_code,
|
||||||
|
rt_uint8_t *buf,
|
||||||
|
rt_uint32_t blocks,
|
||||||
|
rt_uint32_t blksize);
|
||||||
rt_uint8_t sdio_io_readb(struct rt_sdio_function *func,
|
rt_uint8_t sdio_io_readb(struct rt_sdio_function *func,
|
||||||
rt_uint32_t reg, rt_int32_t *err);
|
rt_uint32_t reg,
|
||||||
|
rt_int32_t *err);
|
||||||
rt_int32_t sdio_io_writeb(struct rt_sdio_function *func,
|
rt_int32_t sdio_io_writeb(struct rt_sdio_function *func,
|
||||||
rt_uint32_t reg, rt_uint8_t data);
|
rt_uint32_t reg,
|
||||||
rt_uint16_t sdio_io_readw(struct rt_sdio_function *func, rt_uint32_t addr, rt_int32_t *err);
|
rt_uint8_t data);
|
||||||
rt_int32_t sdio_io_writew(struct rt_sdio_function *func, rt_uint16_t data, rt_uint32_t addr);
|
rt_uint16_t sdio_io_readw(struct rt_sdio_function *func,
|
||||||
rt_uint32_t sdio_io_readl(struct rt_sdio_function *func, rt_uint32_t addr, rt_int32_t *err);
|
rt_uint32_t addr,
|
||||||
rt_int32_t sdio_io_writel(struct rt_sdio_function *func, rt_uint32_t data, rt_uint32_t addr);
|
rt_int32_t *err);
|
||||||
|
rt_int32_t sdio_io_writew(struct rt_sdio_function *func,
|
||||||
|
rt_uint16_t data,
|
||||||
|
rt_uint32_t addr);
|
||||||
|
rt_uint32_t sdio_io_readl(struct rt_sdio_function *func,
|
||||||
|
rt_uint32_t addr,
|
||||||
|
rt_int32_t *err);
|
||||||
|
rt_int32_t sdio_io_writel(struct rt_sdio_function *func,
|
||||||
|
rt_uint32_t data,
|
||||||
|
rt_uint32_t addr);
|
||||||
rt_int32_t sdio_io_read_multi_fifo_b(struct rt_sdio_function *func,
|
rt_int32_t sdio_io_read_multi_fifo_b(struct rt_sdio_function *func,
|
||||||
rt_uint32_t addr, rt_uint8_t *buf, rt_uint32_t len);
|
rt_uint32_t addr,
|
||||||
|
rt_uint8_t *buf,
|
||||||
|
rt_uint32_t len);
|
||||||
rt_int32_t sdio_io_write_multi_fifo_b(struct rt_sdio_function *func,
|
rt_int32_t sdio_io_write_multi_fifo_b(struct rt_sdio_function *func,
|
||||||
rt_uint32_t addr, rt_uint8_t *buf, rt_uint32_t len);
|
rt_uint32_t addr,
|
||||||
|
rt_uint8_t *buf,
|
||||||
|
rt_uint32_t len);
|
||||||
rt_int32_t sdio_io_read_multi_incr_b(struct rt_sdio_function *func,
|
rt_int32_t sdio_io_read_multi_incr_b(struct rt_sdio_function *func,
|
||||||
rt_uint32_t addr, rt_uint8_t *buf, rt_uint32_t len);
|
rt_uint32_t addr,
|
||||||
|
rt_uint8_t *buf,
|
||||||
|
rt_uint32_t len);
|
||||||
rt_int32_t sdio_io_write_multi_incr_b(struct rt_sdio_function *func,
|
rt_int32_t sdio_io_write_multi_incr_b(struct rt_sdio_function *func,
|
||||||
rt_uint32_t addr, rt_uint8_t *buf, rt_uint32_t len);
|
rt_uint32_t addr,
|
||||||
|
rt_uint8_t *buf,
|
||||||
|
rt_uint32_t len);
|
||||||
rt_int32_t init_sdio(struct rt_mmcsd_host *host, rt_uint32_t ocr);
|
rt_int32_t init_sdio(struct rt_mmcsd_host *host, rt_uint32_t ocr);
|
||||||
rt_int32_t sdio_attach_irq(struct rt_sdio_function *func, rt_sdio_irq_handler_t *handler);
|
rt_int32_t sdio_attach_irq(struct rt_sdio_function *func,
|
||||||
|
rt_sdio_irq_handler_t *handler);
|
||||||
rt_int32_t sdio_detach_irq(struct rt_sdio_function *func);
|
rt_int32_t sdio_detach_irq(struct rt_sdio_function *func);
|
||||||
void sdio_irq_wakeup(struct rt_mmcsd_host *host);
|
void sdio_irq_wakeup(struct rt_mmcsd_host *host);
|
||||||
rt_int32_t sdio_enable_func(struct rt_sdio_function *func);
|
rt_int32_t sdio_enable_func(struct rt_sdio_function *func);
|
||||||
rt_int32_t sdio_disable_func(struct rt_sdio_function *func);
|
rt_int32_t sdio_disable_func(struct rt_sdio_function *func);
|
||||||
rt_int32_t sdio_set_block_size(struct rt_sdio_function *func, rt_uint32_t blksize);
|
rt_int32_t sdio_set_block_size(struct rt_sdio_function *func,
|
||||||
|
rt_uint32_t blksize);
|
||||||
rt_int32_t sdio_register_driver(struct rt_sdio_driver *driver);
|
rt_int32_t sdio_register_driver(struct rt_sdio_driver *driver);
|
||||||
rt_int32_t sdio_unregister_driver(struct rt_sdio_driver *driver);
|
rt_int32_t sdio_unregister_driver(struct rt_sdio_driver *driver);
|
||||||
void rt_sdio_init(void);
|
void rt_sdio_init(void);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
@ -15,7 +25,6 @@
|
|||||||
#ifndef __SDIO_FUNC_IDS_H__
|
#ifndef __SDIO_FUNC_IDS_H__
|
||||||
#define __SDIO_FUNC_IDS_H__
|
#define __SDIO_FUNC_IDS_H__
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
@ -175,15 +185,16 @@ typedef struct udev_msg* udev_msg_t;
|
|||||||
|
|
||||||
udevice_t rt_usbd_device_create(void);
|
udevice_t rt_usbd_device_create(void);
|
||||||
uconfig_t rt_usbd_config_create(void);
|
uconfig_t rt_usbd_config_create(void);
|
||||||
uclass_t rt_usbd_class_create(udevice_t device, udev_desc_t dev_desc,
|
uclass_t rt_usbd_class_create(udevice_t device,
|
||||||
|
udev_desc_t dev_desc,
|
||||||
uclass_ops_t ops);
|
uclass_ops_t ops);
|
||||||
uintf_t rt_usbd_interface_create(udevice_t device, uintf_handler_t handler);
|
uintf_t rt_usbd_interface_create(udevice_t device, uintf_handler_t handler);
|
||||||
uep_t rt_usbd_endpoint_create(uep_desc_t ep_desc, udep_handler_t handler);
|
uep_t rt_usbd_endpoint_create(uep_desc_t ep_desc, udep_handler_t handler);
|
||||||
ualtsetting_t rt_usbd_altsetting_create(rt_size_t desc_size);
|
ualtsetting_t rt_usbd_altsetting_create(rt_size_t desc_size);
|
||||||
|
|
||||||
rt_err_t rt_usbd_core_init(void);
|
rt_err_t rt_usbd_core_init(void);
|
||||||
rt_err_t rt_usb_device_init(const char* udc_name);
|
rt_err_t rt_usb_device_init(const char *udc_name);
|
||||||
rt_err_t rt_usbd_post_event(struct udev_msg* msg, rt_size_t size);
|
rt_err_t rt_usbd_post_event(struct udev_msg *msg, rt_size_t size);
|
||||||
rt_err_t rt_usbd_free_device(udevice_t device);
|
rt_err_t rt_usbd_free_device(udevice_t device);
|
||||||
rt_err_t rt_usbd_device_set_controller(udevice_t device, udcd_t dcd);
|
rt_err_t rt_usbd_device_set_controller(udevice_t device, udcd_t dcd);
|
||||||
rt_err_t rt_usbd_device_set_descriptor(udevice_t device, udev_desc_t dev_desc);
|
rt_err_t rt_usbd_device_set_descriptor(udevice_t device, udev_desc_t dev_desc);
|
||||||
@ -193,14 +204,20 @@ rt_err_t rt_usbd_config_add_class(uconfig_t cfg, uclass_t cls);
|
|||||||
rt_err_t rt_usbd_class_add_interface(uclass_t cls, uintf_t intf);
|
rt_err_t rt_usbd_class_add_interface(uclass_t cls, uintf_t intf);
|
||||||
rt_err_t rt_usbd_interface_add_altsetting(uintf_t intf, ualtsetting_t setting);
|
rt_err_t rt_usbd_interface_add_altsetting(uintf_t intf, ualtsetting_t setting);
|
||||||
rt_err_t rt_usbd_altsetting_add_endpoint(ualtsetting_t setting, uep_t ep);
|
rt_err_t rt_usbd_altsetting_add_endpoint(ualtsetting_t setting, uep_t ep);
|
||||||
rt_err_t rt_usbd_altsetting_config_descriptor(ualtsetting_t setting, const void* desc, rt_off_t intf_pos);
|
rt_err_t rt_usbd_altsetting_config_descriptor(ualtsetting_t setting,
|
||||||
|
const void *desc,
|
||||||
|
rt_off_t intf_pos);
|
||||||
rt_err_t rt_usbd_set_config(udevice_t device, rt_uint8_t value);
|
rt_err_t rt_usbd_set_config(udevice_t device, rt_uint8_t value);
|
||||||
rt_err_t rt_usbd_set_altsetting(uintf_t intf, rt_uint8_t value);
|
rt_err_t rt_usbd_set_altsetting(uintf_t intf, rt_uint8_t value);
|
||||||
|
|
||||||
udevice_t rt_usbd_find_device(udcd_t dcd);
|
udevice_t rt_usbd_find_device(udcd_t dcd);
|
||||||
uconfig_t rt_usbd_find_config(udevice_t device, rt_uint8_t value);
|
uconfig_t rt_usbd_find_config(udevice_t device, rt_uint8_t value);
|
||||||
uintf_t rt_usbd_find_interface(udevice_t device, rt_uint8_t value, uclass_t *pcls);
|
uintf_t rt_usbd_find_interface(udevice_t device,
|
||||||
uep_t rt_usbd_find_endpoint(udevice_t device, uclass_t* pcls, rt_uint8_t ep_addr);
|
rt_uint8_t value,
|
||||||
|
uclass_t *pcls);
|
||||||
|
uep_t rt_usbd_find_endpoint(udevice_t device,
|
||||||
|
uclass_t *pcls,
|
||||||
|
rt_uint8_t ep_addr);
|
||||||
|
|
||||||
uclass_t rt_usbd_class_mstorage_create(udevice_t device);
|
uclass_t rt_usbd_class_mstorage_create(udevice_t device);
|
||||||
uclass_t rt_usbd_class_cdc_create(udevice_t device);
|
uclass_t rt_usbd_class_cdc_create(udevice_t device);
|
||||||
@ -218,14 +235,18 @@ rt_inline rt_err_t dcd_set_address(udcd_t dcd, rt_uint8_t value)
|
|||||||
return dcd->ops->set_address(value);
|
return dcd->ops->set_address(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_inline rt_err_t dcd_clear_feature(udcd_t dcd, rt_uint16_t value, rt_uint16_t index)
|
rt_inline rt_err_t dcd_clear_feature(udcd_t dcd,
|
||||||
|
rt_uint16_t value,
|
||||||
|
rt_uint16_t index)
|
||||||
{
|
{
|
||||||
RT_ASSERT(dcd != RT_NULL);
|
RT_ASSERT(dcd != RT_NULL);
|
||||||
|
|
||||||
return dcd->ops->clear_feature(value, index);
|
return dcd->ops->clear_feature(value, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_inline rt_err_t dcd_set_feature(udcd_t dcd, rt_uint8_t value, rt_uint16_t index)
|
rt_inline rt_err_t dcd_set_feature(udcd_t dcd,
|
||||||
|
rt_uint8_t value,
|
||||||
|
rt_uint16_t index)
|
||||||
{
|
{
|
||||||
RT_ASSERT(dcd != RT_NULL);
|
RT_ASSERT(dcd != RT_NULL);
|
||||||
|
|
||||||
@ -275,7 +296,9 @@ rt_inline rt_err_t dcd_ep_read(udcd_t dcd, uep_t ep, void *buffer,
|
|||||||
return dcd->ops->ep_read(ep, buffer, size);
|
return dcd->ops->ep_read(ep, buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_inline rt_size_t dcd_ep_write(udcd_t dcd, uep_t ep, void *buffer,
|
rt_inline rt_size_t dcd_ep_write(udcd_t dcd,
|
||||||
|
uep_t ep,
|
||||||
|
void *buffer,
|
||||||
rt_size_t size)
|
rt_size_t size)
|
||||||
{
|
{
|
||||||
RT_ASSERT(dcd != RT_NULL);
|
RT_ASSERT(dcd != RT_NULL);
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
@ -167,23 +177,27 @@ void rt_usb_hub_thread(void);
|
|||||||
uinst_t rt_usb_alloc_instance(void);
|
uinst_t rt_usb_alloc_instance(void);
|
||||||
rt_err_t rt_usb_attatch_instance(uinst_t uinst);
|
rt_err_t rt_usb_attatch_instance(uinst_t uinst);
|
||||||
rt_err_t rt_usb_detach_instance(uinst_t uinst);
|
rt_err_t rt_usb_detach_instance(uinst_t uinst);
|
||||||
rt_err_t rt_usb_get_descriptor(uinst_t uinst, rt_uint8_t type, void* buffer,
|
rt_err_t rt_usb_get_descriptor(uinst_t uinst,
|
||||||
|
rt_uint8_t type,
|
||||||
|
void *buffer,
|
||||||
int nbytes);
|
int nbytes);
|
||||||
rt_err_t rt_usb_set_configure(uinst_t uinst, int config);
|
rt_err_t rt_usb_set_configure(uinst_t uinst, int config);
|
||||||
rt_err_t rt_usb_set_address(uinst_t uinst);
|
rt_err_t rt_usb_set_address(uinst_t uinst);
|
||||||
rt_err_t rt_usb_set_interface(uinst_t uinst, int intf);
|
rt_err_t rt_usb_set_interface(uinst_t uinst, int intf);
|
||||||
rt_err_t rt_usb_clear_feature(uinst_t uinst, int endpoint, int feature);
|
rt_err_t rt_usb_clear_feature(uinst_t uinst, int endpoint, int feature);
|
||||||
rt_err_t rt_usb_get_interface_descriptor(ucfg_desc_t cfg_desc, int num,
|
rt_err_t rt_usb_get_interface_descriptor(ucfg_desc_t cfg_desc,
|
||||||
uintf_desc_t* intf_desc);
|
int num,
|
||||||
rt_err_t rt_usb_get_endpoint_descriptor(uintf_desc_t intf_desc, int num,
|
uintf_desc_t *intf_desc);
|
||||||
uep_desc_t* ep_desc);
|
rt_err_t rt_usb_get_endpoint_descriptor(uintf_desc_t intf_desc,
|
||||||
|
int num,
|
||||||
|
uep_desc_t *ep_desc);
|
||||||
|
|
||||||
/* usb class driver interface */
|
/* usb class driver interface */
|
||||||
rt_err_t rt_usb_class_driver_init(void);
|
rt_err_t rt_usb_class_driver_init(void);
|
||||||
rt_err_t rt_usb_class_driver_register(ucd_t drv);
|
rt_err_t rt_usb_class_driver_register(ucd_t drv);
|
||||||
rt_err_t rt_usb_class_driver_unregister(ucd_t drv);
|
rt_err_t rt_usb_class_driver_unregister(ucd_t drv);
|
||||||
rt_err_t rt_usb_class_driver_run(ucd_t drv, void* args);
|
rt_err_t rt_usb_class_driver_run(ucd_t drv, void *args);
|
||||||
rt_err_t rt_usb_class_driver_stop(ucd_t drv, void* args);
|
rt_err_t rt_usb_class_driver_stop(ucd_t drv, void *args);
|
||||||
ucd_t rt_usb_class_driver_find(int class_code, int subclass_code);
|
ucd_t rt_usb_class_driver_find(int class_code, int subclass_code);
|
||||||
|
|
||||||
/* usb class driver implement */
|
/* usb class driver implement */
|
||||||
@ -197,28 +211,39 @@ uprotocal_t rt_usb_hid_protocal_kbd(void);
|
|||||||
uprotocal_t rt_usb_hid_protocal_mouse(void);
|
uprotocal_t rt_usb_hid_protocal_mouse(void);
|
||||||
|
|
||||||
/* usb adk class driver interface */
|
/* usb adk class driver interface */
|
||||||
rt_err_t rt_usb_adk_set_string(const char* manufacturer, const char* model,
|
rt_err_t rt_usb_adk_set_string(const char *manufacturer,
|
||||||
const char* description, const char* version, const char* uri,
|
const char *model,
|
||||||
const char* serial);
|
const char *description,
|
||||||
|
const char *version,
|
||||||
|
const char *uri,
|
||||||
|
const char *serial);
|
||||||
|
|
||||||
/* usb hub interface */
|
/* usb hub interface */
|
||||||
rt_err_t rt_usb_hub_get_descriptor(uinst_t uinst, rt_uint8_t *buffer,
|
rt_err_t rt_usb_hub_get_descriptor(uinst_t uinst,
|
||||||
|
rt_uint8_t *buffer,
|
||||||
rt_size_t size);
|
rt_size_t size);
|
||||||
rt_err_t rt_usb_hub_get_status(uinst_t uinst, rt_uint8_t* buffer);
|
rt_err_t rt_usb_hub_get_status(uinst_t uinst, rt_uint8_t *buffer);
|
||||||
rt_err_t rt_usb_hub_get_port_status(uhubinst_t uhub, rt_uint16_t port,
|
rt_err_t rt_usb_hub_get_port_status(uhubinst_t uhub,
|
||||||
rt_uint8_t* buffer);
|
rt_uint16_t port,
|
||||||
rt_err_t rt_usb_hub_clear_port_feature(uhubinst_t uhub, rt_uint16_t port,
|
rt_uint8_t *buffer);
|
||||||
|
rt_err_t rt_usb_hub_clear_port_feature(uhubinst_t uhub,
|
||||||
|
rt_uint16_t port,
|
||||||
rt_uint16_t feature);
|
rt_uint16_t feature);
|
||||||
rt_err_t rt_usb_hub_set_port_feature(uhubinst_t uhub, rt_uint16_t port,
|
rt_err_t rt_usb_hub_set_port_feature(uhubinst_t uhub,
|
||||||
|
rt_uint16_t port,
|
||||||
rt_uint16_t feature);
|
rt_uint16_t feature);
|
||||||
rt_err_t rt_usb_hub_reset_port(uhubinst_t uhub, rt_uint16_t port);
|
rt_err_t rt_usb_hub_reset_port(uhubinst_t uhub, rt_uint16_t port);
|
||||||
rt_err_t rt_usb_post_event(struct uhost_msg* msg, rt_size_t size);
|
rt_err_t rt_usb_post_event(struct uhost_msg* msg, rt_size_t size);
|
||||||
|
|
||||||
/* usb host controller driver interface */
|
/* usb host controller driver interface */
|
||||||
rt_inline rt_err_t rt_usb_hcd_alloc_pipe(uhcd_t hcd, upipe_t* pipe,
|
rt_inline rt_err_t rt_usb_hcd_alloc_pipe(uhcd_t hcd,
|
||||||
uifinst_t ifinst, uep_desc_t ep, func_callback callback)
|
upipe_t *pipe,
|
||||||
|
uifinst_t ifinst,
|
||||||
|
uep_desc_t ep,
|
||||||
|
func_callback callback)
|
||||||
{
|
{
|
||||||
if(ifinst == RT_NULL) return -RT_EIO;
|
if (ifinst == RT_NULL)
|
||||||
|
return -RT_EIO;
|
||||||
|
|
||||||
return hcd->ops->alloc_pipe(pipe, ifinst, ep, callback);
|
return hcd->ops->alloc_pipe(pipe, ifinst, ep, callback);
|
||||||
}
|
}
|
||||||
@ -230,40 +255,59 @@ rt_inline rt_err_t rt_usb_hcd_free_pipe(uhcd_t hcd, upipe_t pipe)
|
|||||||
return hcd->ops->free_pipe(pipe);
|
return hcd->ops->free_pipe(pipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_inline int rt_usb_hcd_bulk_xfer(uhcd_t hcd, upipe_t pipe, void* buffer,
|
rt_inline int rt_usb_hcd_bulk_xfer(uhcd_t hcd,
|
||||||
int nbytes, int timeout)
|
upipe_t pipe,
|
||||||
|
void *buffer,
|
||||||
|
int nbytes,
|
||||||
|
int timeout)
|
||||||
{
|
{
|
||||||
if(pipe == RT_NULL) return -1;
|
if (pipe == RT_NULL)
|
||||||
if(pipe->ifinst == RT_NULL) return -1;
|
return -1;
|
||||||
if(pipe->ifinst->uinst == RT_NULL) return -1;
|
if (pipe->ifinst == RT_NULL)
|
||||||
if(pipe->ifinst->uinst->status == UINST_STATUS_IDLE)
|
return -1;
|
||||||
|
if (pipe->ifinst->uinst == RT_NULL)
|
||||||
|
return -1;
|
||||||
|
if (pipe->ifinst->uinst->status == UINST_STATUS_IDLE)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return hcd->ops->bulk_xfer(pipe, buffer, nbytes, timeout);
|
return hcd->ops->bulk_xfer(pipe, buffer, nbytes, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_inline int rt_usb_hcd_control_xfer(uhcd_t hcd, uinst_t uinst, ureq_t setup,
|
rt_inline int rt_usb_hcd_control_xfer(uhcd_t hcd,
|
||||||
void* buffer, int nbytes, int timeout)
|
uinst_t uinst,
|
||||||
|
ureq_t setup,
|
||||||
|
void *buffer,
|
||||||
|
int nbytes,
|
||||||
|
int timeout)
|
||||||
{
|
{
|
||||||
if(uinst->status == UINST_STATUS_IDLE) return -1;
|
if (uinst->status == UINST_STATUS_IDLE)
|
||||||
|
return -1;
|
||||||
|
|
||||||
return hcd->ops->ctl_xfer(uinst, setup, buffer, nbytes, timeout);
|
return hcd->ops->ctl_xfer(uinst, setup, buffer, nbytes, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_inline int rt_usb_hcd_int_xfer(uhcd_t hcd, upipe_t pipe, void* buffer,
|
rt_inline int rt_usb_hcd_int_xfer(uhcd_t hcd,
|
||||||
int nbytes, int timeout)
|
upipe_t pipe,
|
||||||
|
void *buffer,
|
||||||
|
int nbytes,
|
||||||
|
int timeout)
|
||||||
{
|
{
|
||||||
if(pipe == RT_NULL) return -1;
|
if (pipe == RT_NULL)
|
||||||
if(pipe->ifinst == RT_NULL) return -1;
|
return -1;
|
||||||
if(pipe->ifinst->uinst == RT_NULL) return -1;
|
if (pipe->ifinst == RT_NULL)
|
||||||
if(pipe->ifinst->uinst->status == UINST_STATUS_IDLE)
|
return -1;
|
||||||
|
if (pipe->ifinst->uinst == RT_NULL)
|
||||||
|
return -1;
|
||||||
|
if (pipe->ifinst->uinst->status == UINST_STATUS_IDLE)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return hcd->ops->int_xfer(pipe, buffer, nbytes, timeout);
|
return hcd->ops->int_xfer(pipe, buffer, nbytes, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_inline rt_err_t rt_usb_hcd_hub_control(uhcd_t hcd, rt_uint16_t port,
|
rt_inline rt_err_t rt_usb_hcd_hub_control(uhcd_t hcd,
|
||||||
rt_uint8_t cmd, void *args)
|
rt_uint16_t port,
|
||||||
|
rt_uint8_t cmd,
|
||||||
|
void *args)
|
||||||
{
|
{
|
||||||
return hcd->ops->hub_ctrl(port, cmd, args);
|
return hcd->ops->hub_ctrl(port, cmd, args);
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, Shanghai Real-Thread Technology Co., Ltd
|
* COPYRIGHT (C) 2012, Shanghai Real-Thread Technology Co., Ltd
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2013, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2013, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
@ -93,7 +103,11 @@ static rt_int32_t mmcsd_num_wr_blocks(struct rt_mmcsd_card *card)
|
|||||||
return blocks;
|
return blocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_err_t rt_mmcsd_req_blk(struct rt_mmcsd_card *card, rt_uint32_t sector, void *buf, rt_size_t blks, rt_uint8_t dir)
|
static rt_err_t rt_mmcsd_req_blk(struct rt_mmcsd_card *card,
|
||||||
|
rt_uint32_t sector,
|
||||||
|
void *buf,
|
||||||
|
rt_size_t blks,
|
||||||
|
rt_uint8_t dir)
|
||||||
{
|
{
|
||||||
void *aligned_buf;
|
void *aligned_buf;
|
||||||
|
|
||||||
@ -184,7 +198,8 @@ static rt_err_t rt_mmcsd_req_blk(struct rt_mmcsd_card *card, rt_uint32_t sector,
|
|||||||
if (cmd.err || data.err || stop.err)
|
if (cmd.err || data.err || stop.err)
|
||||||
{
|
{
|
||||||
rt_kprintf("mmcsd request blocks error\n");
|
rt_kprintf("mmcsd request blocks error\n");
|
||||||
rt_kprintf("%d,%d,%d, 0x%08x,0x%08x\n", cmd.err, data.err, stop.err, data.flags, sector);
|
rt_kprintf("%d,%d,%d, 0x%08x,0x%08x\n",
|
||||||
|
cmd.err, data.err, stop.err, data.flags, sector);
|
||||||
|
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
@ -221,7 +236,10 @@ static rt_err_t rt_mmcsd_control(rt_device_t dev, rt_uint8_t cmd, void *args)
|
|||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_size_t rt_mmcsd_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size)
|
static rt_size_t rt_mmcsd_read(rt_device_t dev,
|
||||||
|
rt_off_t pos,
|
||||||
|
void *buffer,
|
||||||
|
rt_size_t size)
|
||||||
{
|
{
|
||||||
rt_err_t err;
|
rt_err_t err;
|
||||||
struct mmcsd_blk_device *blk_dev = (struct mmcsd_blk_device *)dev->user_data;
|
struct mmcsd_blk_device *blk_dev = (struct mmcsd_blk_device *)dev->user_data;
|
||||||
@ -230,6 +248,7 @@ static rt_size_t rt_mmcsd_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_s
|
|||||||
if (dev == RT_NULL)
|
if (dev == RT_NULL)
|
||||||
{
|
{
|
||||||
rt_set_errno(-DFS_STATUS_EINVAL);
|
rt_set_errno(-DFS_STATUS_EINVAL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,7 +265,10 @@ static rt_size_t rt_mmcsd_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_s
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_size_t rt_mmcsd_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size)
|
static rt_size_t rt_mmcsd_write(rt_device_t dev,
|
||||||
|
rt_off_t pos,
|
||||||
|
const void *buffer,
|
||||||
|
rt_size_t size)
|
||||||
{
|
{
|
||||||
rt_err_t err;
|
rt_err_t err;
|
||||||
struct mmcsd_blk_device *blk_dev = (struct mmcsd_blk_device *)dev->user_data;
|
struct mmcsd_blk_device *blk_dev = (struct mmcsd_blk_device *)dev->user_data;
|
||||||
@ -255,6 +277,7 @@ static rt_size_t rt_mmcsd_write(rt_device_t dev, rt_off_t pos, const void *buffe
|
|||||||
if (dev == RT_NULL)
|
if (dev == RT_NULL)
|
||||||
{
|
{
|
||||||
rt_set_errno(-DFS_STATUS_EINVAL);
|
rt_set_errno(-DFS_STATUS_EINVAL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,6 +289,7 @@ static rt_size_t rt_mmcsd_write(rt_device_t dev, rt_off_t pos, const void *buffe
|
|||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
rt_set_errno(-DFS_STATUS_EIO);
|
rt_set_errno(-DFS_STATUS_EIO);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return size;
|
return size;
|
||||||
@ -290,6 +314,7 @@ static rt_int32_t mmcsd_set_blksize(struct rt_mmcsd_card *card)
|
|||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
rt_kprintf("MMCSD: unable to set block size to %d: %d\n", cmd.arg, err);
|
rt_kprintf("MMCSD: unable to set block size to %d: %d\n", cmd.arg, err);
|
||||||
|
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,17 +337,18 @@ rt_int32_t rt_mmcsd_blk_probe(struct rt_mmcsd_card *card)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* get the first sector to read partition table */
|
/* get the first sector to read partition table */
|
||||||
sector = (rt_uint8_t *) rt_malloc(SECTOR_SIZE);
|
sector = (rt_uint8_t *)rt_malloc(SECTOR_SIZE);
|
||||||
if (sector == RT_NULL)
|
if (sector == RT_NULL)
|
||||||
{
|
{
|
||||||
rt_kprintf("allocate partition sector buffer failed\n");
|
rt_kprintf("allocate partition sector buffer failed\n");
|
||||||
|
|
||||||
return -RT_ENOMEM;
|
return -RT_ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = rt_mmcsd_req_blk(card, 0, sector, 1, 0);
|
status = rt_mmcsd_req_blk(card, 0, sector, 1, 0);
|
||||||
if (status == RT_EOK)
|
if (status == RT_EOK)
|
||||||
{
|
{
|
||||||
for(i=0; i < RT_MMCSD_MAX_PARTITION; i++)
|
for (i = 0; i < RT_MMCSD_MAX_PARTITION; i++)
|
||||||
{
|
{
|
||||||
blk_dev = rt_malloc(sizeof(struct mmcsd_blk_device));
|
blk_dev = rt_malloc(sizeof(struct mmcsd_blk_device));
|
||||||
if (!blk_dev)
|
if (!blk_dev)
|
||||||
@ -361,7 +387,7 @@ rt_int32_t rt_mmcsd_blk_probe(struct rt_mmcsd_card *card)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(i == 0)
|
if (i == 0)
|
||||||
{
|
{
|
||||||
/* there is no partition table */
|
/* there is no partition table */
|
||||||
blk_dev->part.offset = 0;
|
blk_dev->part.offset = 0;
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
@ -68,7 +78,9 @@ void mmcsd_send_request(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req)
|
|||||||
rt_sem_take(&host->sem_ack, RT_WAITING_FOREVER);
|
rt_sem_take(&host->sem_ack, RT_WAITING_FOREVER);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_int32_t mmcsd_send_cmd(struct rt_mmcsd_host *host, struct rt_mmcsd_cmd *cmd, int retries)
|
rt_int32_t mmcsd_send_cmd(struct rt_mmcsd_host *host,
|
||||||
|
struct rt_mmcsd_cmd *cmd,
|
||||||
|
int retries)
|
||||||
{
|
{
|
||||||
struct rt_mmcsd_req req;
|
struct rt_mmcsd_req req;
|
||||||
|
|
||||||
@ -88,7 +100,8 @@ rt_int32_t mmcsd_go_idle(struct rt_mmcsd_host *host)
|
|||||||
rt_int32_t err;
|
rt_int32_t err;
|
||||||
struct rt_mmcsd_cmd cmd;
|
struct rt_mmcsd_cmd cmd;
|
||||||
|
|
||||||
if (!controller_is_spi(host)) {
|
if (!controller_is_spi(host))
|
||||||
|
{
|
||||||
mmcsd_set_chip_select(host, MMCSD_CS_HIGH);
|
mmcsd_set_chip_select(host, MMCSD_CS_HIGH);
|
||||||
mmcsd_delay_ms(1);
|
mmcsd_delay_ms(1);
|
||||||
}
|
}
|
||||||
@ -109,11 +122,12 @@ rt_int32_t mmcsd_go_idle(struct rt_mmcsd_host *host)
|
|||||||
mmcsd_delay_ms(1);
|
mmcsd_delay_ms(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_int32_t mmcsd_spi_read_ocr(struct rt_mmcsd_host *host, rt_int32_t high_capacity, rt_uint32_t *ocr)
|
rt_int32_t mmcsd_spi_read_ocr(struct rt_mmcsd_host *host,
|
||||||
|
rt_int32_t high_capacity,
|
||||||
|
rt_uint32_t *ocr)
|
||||||
{
|
{
|
||||||
struct rt_mmcsd_cmd cmd;
|
struct rt_mmcsd_cmd cmd;
|
||||||
rt_int32_t err;
|
rt_int32_t err;
|
||||||
@ -127,10 +141,10 @@ rt_int32_t mmcsd_spi_read_ocr(struct rt_mmcsd_host *host, rt_int32_t high_capaci
|
|||||||
err = mmcsd_send_cmd(host, &cmd, 0);
|
err = mmcsd_send_cmd(host, &cmd, 0);
|
||||||
|
|
||||||
*ocr = cmd.resp[1];
|
*ocr = cmd.resp[1];
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
rt_int32_t mmcsd_all_get_cid(struct rt_mmcsd_host *host, rt_uint32_t *cid)
|
rt_int32_t mmcsd_all_get_cid(struct rt_mmcsd_host *host, rt_uint32_t *cid)
|
||||||
{
|
{
|
||||||
rt_int32_t err;
|
rt_int32_t err;
|
||||||
@ -151,7 +165,6 @@ rt_int32_t mmcsd_all_get_cid(struct rt_mmcsd_host *host, rt_uint32_t *cid)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
rt_int32_t mmcsd_get_cid(struct rt_mmcsd_host *host, rt_uint32_t *cid)
|
rt_int32_t mmcsd_get_cid(struct rt_mmcsd_host *host, rt_uint32_t *cid)
|
||||||
{
|
{
|
||||||
rt_int32_t err, i;
|
rt_int32_t err, i;
|
||||||
@ -174,6 +187,7 @@ rt_int32_t mmcsd_get_cid(struct rt_mmcsd_host *host, rt_uint32_t *cid)
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
rt_memcpy(cid, cmd.resp, sizeof(rt_uint32_t) * 4);
|
rt_memcpy(cid, cmd.resp, sizeof(rt_uint32_t) * 4);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,6 +195,7 @@ rt_int32_t mmcsd_get_cid(struct rt_mmcsd_host *host, rt_uint32_t *cid)
|
|||||||
if (!buf)
|
if (!buf)
|
||||||
{
|
{
|
||||||
rt_kprintf("allocate memory failed\n");
|
rt_kprintf("allocate memory failed\n");
|
||||||
|
|
||||||
return -RT_ENOMEM;
|
return -RT_ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,6 +232,7 @@ rt_int32_t mmcsd_get_cid(struct rt_mmcsd_host *host, rt_uint32_t *cid)
|
|||||||
if (cmd.err || data.err)
|
if (cmd.err || data.err)
|
||||||
{
|
{
|
||||||
rt_free(buf);
|
rt_free(buf);
|
||||||
|
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,6 +263,7 @@ rt_int32_t mmcsd_get_csd(struct rt_mmcsd_card *card, rt_uint32_t *csd)
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
rt_memcpy(csd, cmd.resp, sizeof(rt_uint32_t) * 4);
|
rt_memcpy(csd, cmd.resp, sizeof(rt_uint32_t) * 4);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,6 +271,7 @@ rt_int32_t mmcsd_get_csd(struct rt_mmcsd_card *card, rt_uint32_t *csd)
|
|||||||
if (!buf)
|
if (!buf)
|
||||||
{
|
{
|
||||||
rt_kprintf("allocate memory failed\n");
|
rt_kprintf("allocate memory failed\n");
|
||||||
|
|
||||||
return -RT_ENOMEM;
|
return -RT_ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,6 +309,7 @@ rt_int32_t mmcsd_get_csd(struct rt_mmcsd_card *card, rt_uint32_t *csd)
|
|||||||
if (cmd.err || data.err)
|
if (cmd.err || data.err)
|
||||||
{
|
{
|
||||||
rt_free(buf);
|
rt_free(buf);
|
||||||
|
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,7 +320,8 @@ rt_int32_t mmcsd_get_csd(struct rt_mmcsd_card *card, rt_uint32_t *csd)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_int32_t _mmcsd_select_card(struct rt_mmcsd_host *host, struct rt_mmcsd_card *card)
|
static rt_int32_t _mmcsd_select_card(struct rt_mmcsd_host *host,
|
||||||
|
struct rt_mmcsd_card *card)
|
||||||
{
|
{
|
||||||
rt_int32_t err;
|
rt_int32_t err;
|
||||||
struct rt_mmcsd_cmd cmd;
|
struct rt_mmcsd_cmd cmd;
|
||||||
@ -352,10 +372,10 @@ rt_int32_t mmcsd_spi_use_crc(struct rt_mmcsd_host *host, rt_int32_t use_crc)
|
|||||||
err = mmcsd_send_cmd(host, &cmd, 0);
|
err = mmcsd_send_cmd(host, &cmd, 0);
|
||||||
if (!err)
|
if (!err)
|
||||||
host->spi_use_crc = use_crc;
|
host->spi_use_crc = use_crc;
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
rt_inline void mmcsd_set_iocfg(struct rt_mmcsd_host *host)
|
rt_inline void mmcsd_set_iocfg(struct rt_mmcsd_host *host)
|
||||||
{
|
{
|
||||||
struct rt_mmcsd_io_cfg *io_cfg = &host->io_cfg;
|
struct rt_mmcsd_io_cfg *io_cfg = &host->io_cfg;
|
||||||
@ -411,7 +431,8 @@ void mmcsd_set_bus_width(struct rt_mmcsd_host *host, rt_uint32_t width)
|
|||||||
mmcsd_set_iocfg(host);
|
mmcsd_set_iocfg(host);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mmcsd_set_data_timeout(struct rt_mmcsd_data *data, const struct rt_mmcsd_card *card)
|
void mmcsd_set_data_timeout(struct rt_mmcsd_data *data,
|
||||||
|
const struct rt_mmcsd_card *card)
|
||||||
{
|
{
|
||||||
rt_uint32_t mult;
|
rt_uint32_t mult;
|
||||||
|
|
||||||
@ -419,6 +440,7 @@ void mmcsd_set_data_timeout(struct rt_mmcsd_data *data, const struct rt_mmcsd_ca
|
|||||||
{
|
{
|
||||||
data->timeout_ns = 1000000000; /* SDIO card 1s */
|
data->timeout_ns = 1000000000; /* SDIO card 1s */
|
||||||
data->timeout_clks = 0;
|
data->timeout_clks = 0;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -482,7 +504,6 @@ void mmcsd_set_data_timeout(struct rt_mmcsd_data *data, const struct rt_mmcsd_ca
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mask off any voltages we don't support and select
|
* Mask off any voltages we don't support and select
|
||||||
* the lowest voltage
|
* the lowest voltage
|
||||||
@ -512,7 +533,6 @@ rt_uint32_t mmcsd_select_voltage(struct rt_mmcsd_host *host, rt_uint32_t ocr)
|
|||||||
return ocr;
|
return ocr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void mmcsd_power_up(struct rt_mmcsd_host *host)
|
static void mmcsd_power_up(struct rt_mmcsd_host *host)
|
||||||
{
|
{
|
||||||
int bit = fls(host->valid_ocr) - 1;
|
int bit = fls(host->valid_ocr) - 1;
|
||||||
@ -587,7 +607,8 @@ void mmcsd_detect(void *param)
|
|||||||
mmcsd_send_if_cond(host, host->valid_ocr);
|
mmcsd_send_if_cond(host, host->valid_ocr);
|
||||||
|
|
||||||
err = sdio_io_send_op_cond(host, 0, &ocr);
|
err = sdio_io_send_op_cond(host, 0, &ocr);
|
||||||
if (!err) {
|
if (!err)
|
||||||
|
{
|
||||||
if (init_sdio(host, ocr))
|
if (init_sdio(host, ocr))
|
||||||
mmcsd_power_off(host);
|
mmcsd_power_off(host);
|
||||||
mmcsd_host_unlock(host);
|
mmcsd_host_unlock(host);
|
||||||
@ -619,6 +640,7 @@ struct rt_mmcsd_host *mmcsd_alloc_host(void)
|
|||||||
if (!host)
|
if (!host)
|
||||||
{
|
{
|
||||||
rt_kprintf("alloc host failed\n");
|
rt_kprintf("alloc host failed\n");
|
||||||
|
|
||||||
return RT_NULL;
|
return RT_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
@ -15,26 +25,32 @@
|
|||||||
#include <drivers/mmcsd_core.h>
|
#include <drivers/mmcsd_core.h>
|
||||||
#include <drivers/sd.h>
|
#include <drivers/sd.h>
|
||||||
|
|
||||||
static const rt_uint32_t tran_unit[] = {
|
static const rt_uint32_t tran_unit[] =
|
||||||
|
{
|
||||||
10000, 100000, 1000000, 10000000,
|
10000, 100000, 1000000, 10000000,
|
||||||
0, 0, 0, 0
|
0, 0, 0, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
static const rt_uint8_t tran_value[] = {
|
static const rt_uint8_t tran_value[] =
|
||||||
|
{
|
||||||
0, 10, 12, 13, 15, 20, 25, 30,
|
0, 10, 12, 13, 15, 20, 25, 30,
|
||||||
35, 40, 45, 50, 55, 60, 70, 80,
|
35, 40, 45, 50, 55, 60, 70, 80,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const rt_uint32_t tacc_uint[] = {
|
static const rt_uint32_t tacc_uint[] =
|
||||||
|
{
|
||||||
1, 10, 100, 1000, 10000, 100000, 1000000, 10000000,
|
1, 10, 100, 1000, 10000, 100000, 1000000, 10000000,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const rt_uint8_t tacc_value[] = {
|
static const rt_uint8_t tacc_value[] =
|
||||||
|
{
|
||||||
0, 10, 12, 13, 15, 20, 25, 30,
|
0, 10, 12, 13, 15, 20, 25, 30,
|
||||||
35, 40, 45, 50, 55, 60, 70, 80,
|
35, 40, 45, 50, 55, 60, 70, 80,
|
||||||
};
|
};
|
||||||
|
|
||||||
rt_inline rt_uint32_t GET_BITS(rt_uint32_t *resp, rt_uint32_t start, rt_uint32_t size)
|
rt_inline rt_uint32_t GET_BITS(rt_uint32_t *resp,
|
||||||
|
rt_uint32_t start,
|
||||||
|
rt_uint32_t size)
|
||||||
{
|
{
|
||||||
const rt_int32_t __size = size;
|
const rt_int32_t __size = size;
|
||||||
const rt_uint32_t __mask = (__size < 32 ? 1 << __size : 0) - 1;
|
const rt_uint32_t __mask = (__size < 32 ? 1 << __size : 0) - 1;
|
||||||
@ -45,6 +61,7 @@ rt_inline rt_uint32_t GET_BITS(rt_uint32_t *resp, rt_uint32_t start, rt_uint32_t
|
|||||||
__res = resp[__off] >> __shft;
|
__res = resp[__off] >> __shft;
|
||||||
if (__size + __shft > 32)
|
if (__size + __shft > 32)
|
||||||
__res |= resp[__off-1] << ((32 - __shft) % 32);
|
__res |= resp[__off-1] << ((32 - __shft) % 32);
|
||||||
|
|
||||||
return __res & __mask;
|
return __res & __mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,7 +72,8 @@ static rt_int32_t mmcsd_parse_csd(struct rt_mmcsd_card *card)
|
|||||||
|
|
||||||
csd->csd_structure = GET_BITS(resp, 126, 2);
|
csd->csd_structure = GET_BITS(resp, 126, 2);
|
||||||
|
|
||||||
switch (csd->csd_structure) {
|
switch (csd->csd_structure)
|
||||||
|
{
|
||||||
case 0:
|
case 0:
|
||||||
csd->taac = GET_BITS(resp, 112, 8);
|
csd->taac = GET_BITS(resp, 112, 8);
|
||||||
csd->nsac = GET_BITS(resp, 104, 8);
|
csd->nsac = GET_BITS(resp, 104, 8);
|
||||||
@ -150,6 +168,7 @@ static rt_int32_t mmcsd_parse_csd(struct rt_mmcsd_card *card)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
rt_kprintf("unrecognised CSD structure version %d\n", csd->csd_structure);
|
rt_kprintf("unrecognised CSD structure version %d\n", csd->csd_structure);
|
||||||
|
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
rt_kprintf("SD card capacity %d KB\n", card->card_capacity);
|
rt_kprintf("SD card capacity %d KB\n", card->card_capacity);
|
||||||
@ -183,6 +202,7 @@ static rt_int32_t mmcsd_switch(struct rt_mmcsd_card *card)
|
|||||||
if (!buf)
|
if (!buf)
|
||||||
{
|
{
|
||||||
rt_kprintf("alloc memory failed\n");
|
rt_kprintf("alloc memory failed\n");
|
||||||
|
|
||||||
return -RT_ENOMEM;
|
return -RT_ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,13 +281,16 @@ err:
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err1:
|
err1:
|
||||||
if (cmd.err) err = cmd.err;
|
if (cmd.err)
|
||||||
if (data.err) err = data.err;
|
err = cmd.err;
|
||||||
|
if (data.err)
|
||||||
|
err = data.err;
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_err_t mmcsd_app_cmd(struct rt_mmcsd_host *host, struct rt_mmcsd_card *card)
|
static rt_err_t mmcsd_app_cmd(struct rt_mmcsd_host *host,
|
||||||
|
struct rt_mmcsd_card *card)
|
||||||
{
|
{
|
||||||
rt_err_t err;
|
rt_err_t err;
|
||||||
struct rt_mmcsd_cmd cmd = {0};
|
struct rt_mmcsd_cmd cmd = {0};
|
||||||
@ -297,8 +320,10 @@ static rt_err_t mmcsd_app_cmd(struct rt_mmcsd_host *host, struct rt_mmcsd_card *
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
rt_err_t mmcsd_send_app_cmd(struct rt_mmcsd_host *host, struct rt_mmcsd_card *card,
|
rt_err_t mmcsd_send_app_cmd(struct rt_mmcsd_host *host,
|
||||||
struct rt_mmcsd_cmd *cmd, int retry)
|
struct rt_mmcsd_card *card,
|
||||||
|
struct rt_mmcsd_cmd *cmd,
|
||||||
|
int retry)
|
||||||
{
|
{
|
||||||
struct rt_mmcsd_req req;
|
struct rt_mmcsd_req req;
|
||||||
|
|
||||||
@ -351,7 +376,6 @@ rt_err_t mmcsd_send_app_cmd(struct rt_mmcsd_host *host, struct rt_mmcsd_card *ca
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
rt_err_t mmcsd_app_set_bus_width(struct rt_mmcsd_card *card, rt_int32_t width)
|
rt_err_t mmcsd_app_set_bus_width(struct rt_mmcsd_card *card, rt_int32_t width)
|
||||||
{
|
{
|
||||||
rt_err_t err;
|
rt_err_t err;
|
||||||
@ -381,7 +405,9 @@ rt_err_t mmcsd_app_set_bus_width(struct rt_mmcsd_card *card, rt_int32_t width)
|
|||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_err_t mmcsd_send_app_op_cond(struct rt_mmcsd_host *host, rt_uint32_t ocr, rt_uint32_t *rocr)
|
rt_err_t mmcsd_send_app_op_cond(struct rt_mmcsd_host *host,
|
||||||
|
rt_uint32_t ocr,
|
||||||
|
rt_uint32_t *rocr)
|
||||||
{
|
{
|
||||||
struct rt_mmcsd_cmd cmd;
|
struct rt_mmcsd_cmd cmd;
|
||||||
rt_uint32_t i;
|
rt_uint32_t i;
|
||||||
@ -528,7 +554,8 @@ rt_int32_t mmcsd_get_scr(struct rt_mmcsd_card *card, rt_uint32_t *scr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static rt_int32_t mmcsd_sd_init_card(struct rt_mmcsd_host *host, rt_uint32_t ocr)
|
static rt_int32_t mmcsd_sd_init_card(struct rt_mmcsd_host *host,
|
||||||
|
rt_uint32_t ocr)
|
||||||
{
|
{
|
||||||
struct rt_mmcsd_card *card;
|
struct rt_mmcsd_card *card;
|
||||||
rt_int32_t err;
|
rt_int32_t err;
|
||||||
@ -665,7 +692,8 @@ rt_int32_t init_sd(struct rt_mmcsd_host *host, rt_uint32_t ocr)
|
|||||||
/*
|
/*
|
||||||
* We need to get OCR a different way for SPI.
|
* We need to get OCR a different way for SPI.
|
||||||
*/
|
*/
|
||||||
if (controller_is_spi(host)) {
|
if (controller_is_spi(host))
|
||||||
|
{
|
||||||
mmcsd_go_idle(host);
|
mmcsd_go_idle(host);
|
||||||
|
|
||||||
err = mmcsd_spi_read_ocr(host, 0, &ocr);
|
err = mmcsd_spi_read_ocr(host, 0, &ocr);
|
||||||
@ -673,7 +701,8 @@ rt_int32_t init_sd(struct rt_mmcsd_host *host, rt_uint32_t ocr)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ocr & VDD_165_195) {
|
if (ocr & VDD_165_195)
|
||||||
|
{
|
||||||
rt_kprintf(" SD card claims to support the "
|
rt_kprintf(" SD card claims to support the "
|
||||||
"incompletely defined 'low voltage range'. This "
|
"incompletely defined 'low voltage range'. This "
|
||||||
"will be ignored.\n");
|
"will be ignored.\n");
|
||||||
@ -685,7 +714,8 @@ rt_int32_t init_sd(struct rt_mmcsd_host *host, rt_uint32_t ocr)
|
|||||||
/*
|
/*
|
||||||
* Can we support the voltage(s) of the card(s)?
|
* Can we support the voltage(s) of the card(s)?
|
||||||
*/
|
*/
|
||||||
if (!current_ocr) {
|
if (!current_ocr)
|
||||||
|
{
|
||||||
err = -RT_ERROR;
|
err = -RT_ERROR;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
* COPYRIGHT (C) 2006, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
@ -25,12 +35,14 @@
|
|||||||
static rt_list_t sdio_cards;
|
static rt_list_t sdio_cards;
|
||||||
static rt_list_t sdio_drivers;
|
static rt_list_t sdio_drivers;
|
||||||
|
|
||||||
struct sdio_card {
|
struct sdio_card
|
||||||
|
{
|
||||||
struct rt_mmcsd_card *card;
|
struct rt_mmcsd_card *card;
|
||||||
rt_list_t list;
|
rt_list_t list;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sdio_driver {
|
struct sdio_driver
|
||||||
|
{
|
||||||
struct rt_sdio_driver *drv;
|
struct rt_sdio_driver *drv;
|
||||||
rt_list_t list;
|
rt_list_t list;
|
||||||
};
|
};
|
||||||
@ -38,17 +50,22 @@ struct sdio_driver {
|
|||||||
#define MIN(a, b) (a < b ? a : b)
|
#define MIN(a, b) (a < b ? a : b)
|
||||||
|
|
||||||
static const rt_uint8_t speed_value[16] =
|
static const rt_uint8_t speed_value[16] =
|
||||||
{ 0, 10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80 };
|
{
|
||||||
|
0, 10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80
|
||||||
|
};
|
||||||
|
|
||||||
static const rt_uint32_t speed_unit[8] =
|
static const rt_uint32_t speed_unit[8] =
|
||||||
{ 10000, 100000, 1000000, 10000000, 0, 0, 0, 0 };
|
{
|
||||||
|
10000, 100000, 1000000, 10000000, 0, 0, 0, 0
|
||||||
|
};
|
||||||
|
|
||||||
rt_inline rt_int32_t sdio_match_card(struct rt_mmcsd_card *card,
|
rt_inline rt_int32_t sdio_match_card(struct rt_mmcsd_card *card,
|
||||||
const struct rt_sdio_device_id *id);
|
const struct rt_sdio_device_id *id);
|
||||||
|
|
||||||
|
|
||||||
rt_int32_t sdio_io_send_op_cond(struct rt_mmcsd_host *host, rt_uint32_t ocr, rt_uint32_t
|
rt_int32_t sdio_io_send_op_cond(struct rt_mmcsd_host *host,
|
||||||
*cmd5_resp)
|
rt_uint32_t ocr,
|
||||||
|
rt_uint32_t *cmd5_resp)
|
||||||
{
|
{
|
||||||
struct rt_mmcsd_cmd cmd;
|
struct rt_mmcsd_cmd cmd;
|
||||||
rt_int32_t i, err = 0;
|
rt_int32_t i, err = 0;
|
||||||
@ -100,9 +117,12 @@ rt_int32_t sdio_io_send_op_cond(struct rt_mmcsd_host *host, rt_uint32_t ocr, rt_
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rt_int32_t sdio_io_rw_direct(struct rt_mmcsd_card *card,
|
||||||
rt_int32_t sdio_io_rw_direct(struct rt_mmcsd_card *card, rt_int32_t rw, rt_uint32_t fn,
|
rt_int32_t rw,
|
||||||
rt_uint32_t reg_addr, rt_uint8_t *pdata, rt_uint8_t raw)
|
rt_uint32_t fn,
|
||||||
|
rt_uint32_t reg_addr,
|
||||||
|
rt_uint8_t *pdata,
|
||||||
|
rt_uint8_t raw)
|
||||||
{
|
{
|
||||||
struct rt_mmcsd_cmd cmd;
|
struct rt_mmcsd_cmd cmd;
|
||||||
rt_int32_t err;
|
rt_int32_t err;
|
||||||
@ -148,8 +168,14 @@ rt_int32_t sdio_io_rw_direct(struct rt_mmcsd_card *card, rt_int32_t rw, rt_uint3
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_int32_t sdio_io_rw_extended(struct rt_mmcsd_card *card, rt_int32_t rw, rt_uint32_t fn,
|
rt_int32_t sdio_io_rw_extended(struct rt_mmcsd_card *card,
|
||||||
rt_uint32_t addr, rt_int32_t op_code, rt_uint8_t *buf, rt_uint32_t blocks, rt_uint32_t blksize)
|
rt_int32_t rw,
|
||||||
|
rt_uint32_t fn,
|
||||||
|
rt_uint32_t addr,
|
||||||
|
rt_int32_t op_code,
|
||||||
|
rt_uint8_t *buf,
|
||||||
|
rt_uint32_t blocks,
|
||||||
|
rt_uint32_t blksize)
|
||||||
{
|
{
|
||||||
struct rt_mmcsd_req req;
|
struct rt_mmcsd_req req;
|
||||||
struct rt_mmcsd_cmd cmd;
|
struct rt_mmcsd_cmd cmd;
|
||||||
@ -214,11 +240,16 @@ rt_inline rt_uint32_t sdio_max_block_size(struct rt_sdio_function *func)
|
|||||||
rt_uint32_t size = MIN(func->card->host->max_seg_size,
|
rt_uint32_t size = MIN(func->card->host->max_seg_size,
|
||||||
func->card->host->max_blk_size);
|
func->card->host->max_blk_size);
|
||||||
size = MIN(size, func->max_blk_size);
|
size = MIN(size, func->max_blk_size);
|
||||||
|
|
||||||
return MIN(size, 512u); /* maximum size for byte mode */
|
return MIN(size, 512u); /* maximum size for byte mode */
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_int32_t sdio_io_rw_extended_block(struct rt_sdio_function *func, rt_int32_t rw,
|
static rt_int32_t sdio_io_rw_extended_block(struct rt_sdio_function *func,
|
||||||
rt_uint32_t addr, rt_int32_t op_code, rt_uint8_t *buf, rt_uint32_t len)
|
rt_int32_t rw,
|
||||||
|
rt_uint32_t addr,
|
||||||
|
rt_int32_t op_code,
|
||||||
|
rt_uint8_t *buf,
|
||||||
|
rt_uint32_t len)
|
||||||
{
|
{
|
||||||
rt_int32_t ret;
|
rt_int32_t ret;
|
||||||
rt_uint32_t left_size;
|
rt_uint32_t left_size;
|
||||||
@ -227,13 +258,14 @@ static rt_int32_t sdio_io_rw_extended_block(struct rt_sdio_function *func, rt_in
|
|||||||
left_size = len;
|
left_size = len;
|
||||||
|
|
||||||
/* Do the bulk of the transfer using block mode (if supported). */
|
/* Do the bulk of the transfer using block mode (if supported). */
|
||||||
if (func->card->cccr.multi_block && (len > sdio_max_block_size(func))) {
|
if (func->card->cccr.multi_block && (len > sdio_max_block_size(func)))
|
||||||
|
{
|
||||||
max_blks = MIN(func->card->host->max_blk_count,
|
max_blks = MIN(func->card->host->max_blk_count,
|
||||||
func->card->host->max_seg_size / func->cur_blk_size);
|
func->card->host->max_seg_size / func->cur_blk_size);
|
||||||
max_blks = MIN(max_blks, 511u);
|
max_blks = MIN(max_blks, 511u);
|
||||||
|
|
||||||
while (left_size > func->cur_blk_size) {
|
while (left_size > func->cur_blk_size)
|
||||||
|
{
|
||||||
blks = left_size / func->cur_blk_size;
|
blks = left_size / func->cur_blk_size;
|
||||||
if (blks > max_blks)
|
if (blks > max_blks)
|
||||||
blks = max_blks;
|
blks = max_blks;
|
||||||
@ -251,7 +283,8 @@ static rt_int32_t sdio_io_rw_extended_block(struct rt_sdio_function *func, rt_in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (left_size > 0) {
|
while (left_size > 0)
|
||||||
|
{
|
||||||
len = MIN(left_size, sdio_max_block_size(func));
|
len = MIN(left_size, sdio_max_block_size(func));
|
||||||
|
|
||||||
ret = sdio_io_rw_extended(func->card, rw, func->num,
|
ret = sdio_io_rw_extended(func->card, rw, func->num,
|
||||||
@ -268,9 +301,9 @@ static rt_int32_t sdio_io_rw_extended_block(struct rt_sdio_function *func, rt_in
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
rt_uint8_t sdio_io_readb(struct rt_sdio_function *func,
|
rt_uint8_t sdio_io_readb(struct rt_sdio_function *func,
|
||||||
rt_uint32_t reg, rt_int32_t *err)
|
rt_uint32_t reg,
|
||||||
|
rt_int32_t *err)
|
||||||
{
|
{
|
||||||
rt_uint8_t data;
|
rt_uint8_t data;
|
||||||
rt_int32_t ret;
|
rt_int32_t ret;
|
||||||
@ -286,12 +319,15 @@ rt_uint8_t sdio_io_readb(struct rt_sdio_function *func,
|
|||||||
}
|
}
|
||||||
|
|
||||||
rt_int32_t sdio_io_writeb(struct rt_sdio_function *func,
|
rt_int32_t sdio_io_writeb(struct rt_sdio_function *func,
|
||||||
rt_uint32_t reg, rt_uint8_t data)
|
rt_uint32_t reg,
|
||||||
|
rt_uint8_t data)
|
||||||
{
|
{
|
||||||
return sdio_io_rw_direct(func->card, 1, func->num, reg, &data, 0);
|
return sdio_io_rw_direct(func->card, 1, func->num, reg, &data, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_uint16_t sdio_io_readw(struct rt_sdio_function *func, rt_uint32_t addr, rt_int32_t *err)
|
rt_uint16_t sdio_io_readw(struct rt_sdio_function *func,
|
||||||
|
rt_uint32_t addr,
|
||||||
|
rt_int32_t *err)
|
||||||
{
|
{
|
||||||
rt_int32_t ret;
|
rt_int32_t ret;
|
||||||
rt_uint32_t dmabuf;
|
rt_uint32_t dmabuf;
|
||||||
@ -309,14 +345,18 @@ rt_uint16_t sdio_io_readw(struct rt_sdio_function *func, rt_uint32_t addr, rt_in
|
|||||||
return (rt_uint16_t)dmabuf;
|
return (rt_uint16_t)dmabuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_int32_t sdio_io_writew(struct rt_sdio_function *func, rt_uint16_t data, rt_uint32_t addr)
|
rt_int32_t sdio_io_writew(struct rt_sdio_function *func,
|
||||||
|
rt_uint16_t data,
|
||||||
|
rt_uint32_t addr)
|
||||||
{
|
{
|
||||||
rt_uint32_t dmabuf = data;
|
rt_uint32_t dmabuf = data;
|
||||||
|
|
||||||
return sdio_io_rw_extended_block(func, 1, addr, 1, (rt_uint8_t *)&dmabuf, 2);
|
return sdio_io_rw_extended_block(func, 1, addr, 1, (rt_uint8_t *)&dmabuf, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_uint32_t sdio_io_readl(struct rt_sdio_function *func, rt_uint32_t addr, rt_int32_t *err)
|
rt_uint32_t sdio_io_readl(struct rt_sdio_function *func,
|
||||||
|
rt_uint32_t addr,
|
||||||
|
rt_int32_t *err)
|
||||||
{
|
{
|
||||||
rt_int32_t ret;
|
rt_int32_t ret;
|
||||||
rt_uint32_t dmabuf;
|
rt_uint32_t dmabuf;
|
||||||
@ -334,7 +374,9 @@ rt_uint32_t sdio_io_readl(struct rt_sdio_function *func, rt_uint32_t addr, rt_in
|
|||||||
return dmabuf;
|
return dmabuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_int32_t sdio_io_writel(struct rt_sdio_function *func, rt_uint32_t data, rt_uint32_t addr)
|
rt_int32_t sdio_io_writel(struct rt_sdio_function *func,
|
||||||
|
rt_uint32_t data,
|
||||||
|
rt_uint32_t addr)
|
||||||
{
|
{
|
||||||
rt_uint32_t dmabuf = data;
|
rt_uint32_t dmabuf = data;
|
||||||
|
|
||||||
@ -342,25 +384,33 @@ rt_int32_t sdio_io_writel(struct rt_sdio_function *func, rt_uint32_t data, rt_ui
|
|||||||
}
|
}
|
||||||
|
|
||||||
rt_int32_t sdio_io_read_multi_fifo_b(struct rt_sdio_function *func,
|
rt_int32_t sdio_io_read_multi_fifo_b(struct rt_sdio_function *func,
|
||||||
rt_uint32_t addr, rt_uint8_t *buf, rt_uint32_t len)
|
rt_uint32_t addr,
|
||||||
|
rt_uint8_t *buf,
|
||||||
|
rt_uint32_t len)
|
||||||
{
|
{
|
||||||
return sdio_io_rw_extended_block(func, 0, addr, 0, buf, len);
|
return sdio_io_rw_extended_block(func, 0, addr, 0, buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_int32_t sdio_io_write_multi_fifo_b(struct rt_sdio_function *func,
|
rt_int32_t sdio_io_write_multi_fifo_b(struct rt_sdio_function *func,
|
||||||
rt_uint32_t addr, rt_uint8_t *buf, rt_uint32_t len)
|
rt_uint32_t addr,
|
||||||
|
rt_uint8_t *buf,
|
||||||
|
rt_uint32_t len)
|
||||||
{
|
{
|
||||||
return sdio_io_rw_extended_block(func, 1, addr, 0, buf, len);
|
return sdio_io_rw_extended_block(func, 1, addr, 0, buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_int32_t sdio_io_read_multi_incr_b(struct rt_sdio_function *func,
|
rt_int32_t sdio_io_read_multi_incr_b(struct rt_sdio_function *func,
|
||||||
rt_uint32_t addr, rt_uint8_t *buf, rt_uint32_t len)
|
rt_uint32_t addr,
|
||||||
|
rt_uint8_t *buf,
|
||||||
|
rt_uint32_t len)
|
||||||
{
|
{
|
||||||
return sdio_io_rw_extended_block(func, 0, addr, 1, buf, len);
|
return sdio_io_rw_extended_block(func, 0, addr, 1, buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_int32_t sdio_io_write_multi_incr_b(struct rt_sdio_function *func,
|
rt_int32_t sdio_io_write_multi_incr_b(struct rt_sdio_function *func,
|
||||||
rt_uint32_t addr, rt_uint8_t *buf, rt_uint32_t len)
|
rt_uint32_t addr,
|
||||||
|
rt_uint8_t *buf,
|
||||||
|
rt_uint32_t len)
|
||||||
{
|
{
|
||||||
return sdio_io_rw_extended_block(func, 1, addr, 1, buf, len);
|
return sdio_io_rw_extended_block(func, 1, addr, 1, buf, len);
|
||||||
}
|
}
|
||||||
@ -382,6 +432,7 @@ static rt_int32_t sdio_read_cccr(struct rt_mmcsd_card *card)
|
|||||||
if (cccr_version > SDIO_CCCR_REV_1_20)
|
if (cccr_version > SDIO_CCCR_REV_1_20)
|
||||||
{
|
{
|
||||||
rt_kprintf("unrecognised CCCR structure version %d\n", cccr_version);
|
rt_kprintf("unrecognised CCCR structure version %d\n", cccr_version);
|
||||||
|
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -425,7 +476,8 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static rt_int32_t cistpl_funce_func0(struct rt_mmcsd_card *card,
|
static rt_int32_t cistpl_funce_func0(struct rt_mmcsd_card *card,
|
||||||
const rt_uint8_t *buf, rt_uint32_t size)
|
const rt_uint8_t *buf,
|
||||||
|
rt_uint32_t size)
|
||||||
{
|
{
|
||||||
if (size < 0x04 || buf[0] != 0)
|
if (size < 0x04 || buf[0] != 0)
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
@ -441,7 +493,8 @@ static rt_int32_t cistpl_funce_func0(struct rt_mmcsd_card *card,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static rt_int32_t cistpl_funce_func(struct rt_sdio_function *func,
|
static rt_int32_t cistpl_funce_func(struct rt_sdio_function *func,
|
||||||
const rt_uint8_t *buf, rt_uint32_t size)
|
const rt_uint8_t *buf,
|
||||||
|
rt_uint32_t size)
|
||||||
{
|
{
|
||||||
rt_uint32_t version;
|
rt_uint32_t version;
|
||||||
rt_uint32_t min_size;
|
rt_uint32_t min_size;
|
||||||
@ -605,8 +658,6 @@ void sdio_free_cis(struct rt_sdio_function *func)
|
|||||||
func->tuples = RT_NULL;
|
func->tuples = RT_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static rt_int32_t sdio_read_fbr(struct rt_sdio_function *func)
|
static rt_int32_t sdio_read_fbr(struct rt_sdio_function *func)
|
||||||
{
|
{
|
||||||
rt_int32_t ret;
|
rt_int32_t ret;
|
||||||
@ -635,7 +686,8 @@ err:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static rt_int32_t sdio_initialize_function(struct rt_mmcsd_card *card, rt_uint32_t func_num)
|
static rt_int32_t sdio_initialize_function(struct rt_mmcsd_card *card,
|
||||||
|
rt_uint32_t func_num)
|
||||||
{
|
{
|
||||||
rt_int32_t ret;
|
rt_int32_t ret;
|
||||||
struct rt_sdio_function *func;
|
struct rt_sdio_function *func;
|
||||||
@ -674,7 +726,6 @@ err:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static rt_int32_t sdio_set_highspeed(struct rt_mmcsd_card *card)
|
static rt_int32_t sdio_set_highspeed(struct rt_mmcsd_card *card)
|
||||||
{
|
{
|
||||||
rt_int32_t ret;
|
rt_int32_t ret;
|
||||||
@ -727,7 +778,6 @@ static rt_int32_t sdio_set_bus_wide(struct rt_mmcsd_card *card)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static rt_int32_t sdio_register_card(struct rt_mmcsd_card *card)
|
static rt_int32_t sdio_register_card(struct rt_mmcsd_card *card)
|
||||||
{
|
{
|
||||||
struct sdio_card *sc;
|
struct sdio_card *sc;
|
||||||
@ -762,7 +812,6 @@ out:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static rt_int32_t sdio_init_card(struct rt_mmcsd_host *host, rt_uint32_t ocr)
|
static rt_int32_t sdio_init_card(struct rt_mmcsd_host *host, rt_uint32_t ocr)
|
||||||
{
|
{
|
||||||
rt_int32_t err = 0;
|
rt_int32_t err = 0;
|
||||||
@ -878,7 +927,6 @@ err3:
|
|||||||
host->card->sdio_function[i] = RT_NULL;
|
host->card->sdio_function[i] = RT_NULL;
|
||||||
rt_free(host->card);
|
rt_free(host->card);
|
||||||
host->card = RT_NULL;
|
host->card = RT_NULL;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -900,8 +948,6 @@ err:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
rt_int32_t init_sdio(struct rt_mmcsd_host *host, rt_uint32_t ocr)
|
rt_int32_t init_sdio(struct rt_mmcsd_host *host, rt_uint32_t ocr)
|
||||||
{
|
{
|
||||||
rt_int32_t err;
|
rt_int32_t err;
|
||||||
@ -943,12 +989,8 @@ err:
|
|||||||
rt_kprintf("init SDIO card failed\n");
|
rt_kprintf("init SDIO card failed\n");
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void sdio_irq_thread(void *param)
|
static void sdio_irq_thread(void *param)
|
||||||
{
|
{
|
||||||
rt_int32_t i, ret;
|
rt_int32_t i, ret;
|
||||||
@ -1046,8 +1088,8 @@ static rt_int32_t sdio_irq_thread_delete(struct rt_mmcsd_card *card)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rt_int32_t sdio_attach_irq(struct rt_sdio_function *func,
|
||||||
rt_int32_t sdio_attach_irq(struct rt_sdio_function *func, rt_sdio_irq_handler_t *handler)
|
rt_sdio_irq_handler_t *handler)
|
||||||
{
|
{
|
||||||
rt_int32_t ret;
|
rt_int32_t ret;
|
||||||
rt_uint8_t reg;
|
rt_uint8_t reg;
|
||||||
@ -1063,6 +1105,7 @@ rt_int32_t sdio_attach_irq(struct rt_sdio_function *func, rt_sdio_irq_handler_t
|
|||||||
if (func->irq_handler)
|
if (func->irq_handler)
|
||||||
{
|
{
|
||||||
mmcsd_dbg("SDIO: IRQ for already in use.\n");
|
mmcsd_dbg("SDIO: IRQ for already in use.\n");
|
||||||
|
|
||||||
return -RT_EBUSY;
|
return -RT_EBUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1129,7 +1172,6 @@ void sdio_irq_wakeup(struct rt_mmcsd_host *host)
|
|||||||
rt_sem_release(host->sdio_irq_sem);
|
rt_sem_release(host->sdio_irq_sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
rt_int32_t sdio_enable_func(struct rt_sdio_function *func)
|
rt_int32_t sdio_enable_func(struct rt_sdio_function *func)
|
||||||
{
|
{
|
||||||
rt_int32_t ret;
|
rt_int32_t ret;
|
||||||
@ -1177,7 +1219,6 @@ err:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
rt_int32_t sdio_disable_func(struct rt_sdio_function *func)
|
rt_int32_t sdio_disable_func(struct rt_sdio_function *func)
|
||||||
{
|
{
|
||||||
rt_int32_t ret;
|
rt_int32_t ret;
|
||||||
@ -1210,7 +1251,8 @@ err:
|
|||||||
return -RT_EIO;
|
return -RT_EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_int32_t sdio_set_block_size(struct rt_sdio_function *func, rt_uint32_t blksize)
|
rt_int32_t sdio_set_block_size(struct rt_sdio_function *func,
|
||||||
|
rt_uint32_t blksize)
|
||||||
{
|
{
|
||||||
rt_int32_t ret;
|
rt_int32_t ret;
|
||||||
struct rt_sdio_function *func0 = func->card->sdio_function[0];
|
struct rt_sdio_function *func0 = func->card->sdio_function[0];
|
||||||
@ -1237,7 +1279,6 @@ rt_int32_t sdio_set_block_size(struct rt_sdio_function *func, rt_uint32_t blksiz
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
rt_inline rt_int32_t sdio_match_card(struct rt_mmcsd_card *card,
|
rt_inline rt_int32_t sdio_match_card(struct rt_mmcsd_card *card,
|
||||||
const struct rt_sdio_device_id *id)
|
const struct rt_sdio_device_id *id)
|
||||||
{
|
{
|
||||||
@ -1280,6 +1321,7 @@ rt_int32_t sdio_register_driver(struct rt_sdio_driver *driver)
|
|||||||
if (sd == RT_NULL)
|
if (sd == RT_NULL)
|
||||||
{
|
{
|
||||||
rt_kprintf("malloc sdio driver failed\n");
|
rt_kprintf("malloc sdio driver failed\n");
|
||||||
|
|
||||||
return -RT_ENOMEM;
|
return -RT_ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1335,7 +1377,6 @@ rt_int32_t sdio_unregister_driver(struct rt_sdio_driver *driver)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void rt_sdio_init(void)
|
void rt_sdio_init(void)
|
||||||
{
|
{
|
||||||
rt_list_init(&sdio_cards);
|
rt_list_init(&sdio_cards);
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
* COPYRIGHT (C) 2012, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
@ -3,9 +3,19 @@
|
|||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
* COPYRIGHT (C) 2011, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* found in the file LICENSE in this distribution or at
|
* it under the terms of the GNU General Public License as published by
|
||||||
* http://www.rt-thread.org/license/LICENSE
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
|
Loading…
x
Reference in New Issue
Block a user