mirror of
https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
synced 2025-09-10 01:12:45 -04:00
Fixed MTP to work with TWRP
This commit is contained in:
commit
f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions
38
include/net/phonet/gprs.h
Normal file
38
include/net/phonet/gprs.h
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* File: pep_gprs.h
|
||||
*
|
||||
* GPRS over Phonet pipe end point socket
|
||||
*
|
||||
* Copyright (C) 2008 Nokia Corporation.
|
||||
*
|
||||
* Author: Rémi Denis-Courmont
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* 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 St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef NET_PHONET_GPRS_H
|
||||
#define NET_PHONET_GPRS_H
|
||||
|
||||
struct sock;
|
||||
struct sk_buff;
|
||||
|
||||
int pep_writeable(struct sock *sk);
|
||||
int pep_write(struct sock *sk, struct sk_buff *skb);
|
||||
struct sk_buff *pep_read(struct sock *sk);
|
||||
|
||||
int gprs_attach(struct sock *sk);
|
||||
void gprs_detach(struct sock *sk);
|
||||
|
||||
#endif
|
168
include/net/phonet/pep.h
Normal file
168
include/net/phonet/pep.h
Normal file
|
@ -0,0 +1,168 @@
|
|||
/*
|
||||
* File: pep.h
|
||||
*
|
||||
* Phonet Pipe End Point sockets definitions
|
||||
*
|
||||
* Copyright (C) 2008 Nokia Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* 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 St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef NET_PHONET_PEP_H
|
||||
#define NET_PHONET_PEP_H
|
||||
|
||||
struct pep_sock {
|
||||
struct pn_sock pn_sk;
|
||||
|
||||
/* XXX: union-ify listening vs connected stuff ? */
|
||||
/* Listening socket stuff: */
|
||||
struct hlist_head hlist;
|
||||
|
||||
/* Connected socket stuff: */
|
||||
struct sock *listener;
|
||||
struct sk_buff_head ctrlreq_queue;
|
||||
#define PNPIPE_CTRLREQ_MAX 10
|
||||
atomic_t tx_credits;
|
||||
int ifindex;
|
||||
u16 peer_type; /* peer type/subtype */
|
||||
u8 pipe_handle;
|
||||
|
||||
u8 rx_credits;
|
||||
u8 rx_fc; /* RX flow control */
|
||||
u8 tx_fc; /* TX flow control */
|
||||
u8 init_enable; /* auto-enable at creation */
|
||||
u8 aligned;
|
||||
};
|
||||
|
||||
static inline struct pep_sock *pep_sk(struct sock *sk)
|
||||
{
|
||||
return (struct pep_sock *)sk;
|
||||
}
|
||||
|
||||
extern const struct proto_ops phonet_stream_ops;
|
||||
|
||||
/* Pipe protocol definitions */
|
||||
struct pnpipehdr {
|
||||
u8 utid; /* transaction ID */
|
||||
u8 message_id;
|
||||
u8 pipe_handle;
|
||||
union {
|
||||
u8 state_after_connect; /* connect request */
|
||||
u8 state_after_reset; /* reset request */
|
||||
u8 error_code; /* any response */
|
||||
u8 pep_type; /* status indication */
|
||||
u8 data[1];
|
||||
};
|
||||
};
|
||||
#define other_pep_type data[1]
|
||||
|
||||
static inline struct pnpipehdr *pnp_hdr(struct sk_buff *skb)
|
||||
{
|
||||
return (struct pnpipehdr *)skb_transport_header(skb);
|
||||
}
|
||||
|
||||
#define MAX_PNPIPE_HEADER (MAX_PHONET_HEADER + 4)
|
||||
|
||||
enum {
|
||||
PNS_PIPE_CREATE_REQ = 0x00,
|
||||
PNS_PIPE_CREATE_RESP,
|
||||
PNS_PIPE_REMOVE_REQ,
|
||||
PNS_PIPE_REMOVE_RESP,
|
||||
|
||||
PNS_PIPE_DATA = 0x20,
|
||||
PNS_PIPE_ALIGNED_DATA,
|
||||
|
||||
PNS_PEP_CONNECT_REQ = 0x40,
|
||||
PNS_PEP_CONNECT_RESP,
|
||||
PNS_PEP_DISCONNECT_REQ,
|
||||
PNS_PEP_DISCONNECT_RESP,
|
||||
PNS_PEP_RESET_REQ,
|
||||
PNS_PEP_RESET_RESP,
|
||||
PNS_PEP_ENABLE_REQ,
|
||||
PNS_PEP_ENABLE_RESP,
|
||||
PNS_PEP_CTRL_REQ,
|
||||
PNS_PEP_CTRL_RESP,
|
||||
PNS_PEP_DISABLE_REQ = 0x4C,
|
||||
PNS_PEP_DISABLE_RESP,
|
||||
|
||||
PNS_PEP_STATUS_IND = 0x60,
|
||||
PNS_PIPE_CREATED_IND,
|
||||
PNS_PIPE_RESET_IND = 0x63,
|
||||
PNS_PIPE_ENABLED_IND,
|
||||
PNS_PIPE_REDIRECTED_IND,
|
||||
PNS_PIPE_DISABLED_IND = 0x66,
|
||||
};
|
||||
|
||||
#define PN_PIPE_INVALID_HANDLE 0xff
|
||||
#define PN_PEP_TYPE_COMMON 0x00
|
||||
|
||||
/* Phonet pipe status indication */
|
||||
enum {
|
||||
PN_PEP_IND_FLOW_CONTROL,
|
||||
PN_PEP_IND_ID_MCFC_GRANT_CREDITS,
|
||||
};
|
||||
|
||||
/* Phonet pipe error codes */
|
||||
enum {
|
||||
PN_PIPE_NO_ERROR,
|
||||
PN_PIPE_ERR_INVALID_PARAM,
|
||||
PN_PIPE_ERR_INVALID_HANDLE,
|
||||
PN_PIPE_ERR_INVALID_CTRL_ID,
|
||||
PN_PIPE_ERR_NOT_ALLOWED,
|
||||
PN_PIPE_ERR_PEP_IN_USE,
|
||||
PN_PIPE_ERR_OVERLOAD,
|
||||
PN_PIPE_ERR_DEV_DISCONNECTED,
|
||||
PN_PIPE_ERR_TIMEOUT,
|
||||
PN_PIPE_ERR_ALL_PIPES_IN_USE,
|
||||
PN_PIPE_ERR_GENERAL,
|
||||
PN_PIPE_ERR_NOT_SUPPORTED,
|
||||
};
|
||||
|
||||
/* Phonet pipe states */
|
||||
enum {
|
||||
PN_PIPE_DISABLE,
|
||||
PN_PIPE_ENABLE,
|
||||
};
|
||||
|
||||
/* Phonet pipe sub-block types */
|
||||
enum {
|
||||
PN_PIPE_SB_CREATE_REQ_PEP_SUB_TYPE,
|
||||
PN_PIPE_SB_CONNECT_REQ_PEP_SUB_TYPE,
|
||||
PN_PIPE_SB_REDIRECT_REQ_PEP_SUB_TYPE,
|
||||
PN_PIPE_SB_NEGOTIATED_FC,
|
||||
PN_PIPE_SB_REQUIRED_FC_TX,
|
||||
PN_PIPE_SB_PREFERRED_FC_RX,
|
||||
PN_PIPE_SB_ALIGNED_DATA,
|
||||
};
|
||||
|
||||
/* Phonet pipe flow control models */
|
||||
enum {
|
||||
PN_NO_FLOW_CONTROL,
|
||||
PN_LEGACY_FLOW_CONTROL,
|
||||
PN_ONE_CREDIT_FLOW_CONTROL,
|
||||
PN_MULTI_CREDIT_FLOW_CONTROL,
|
||||
PN_MAX_FLOW_CONTROL,
|
||||
};
|
||||
|
||||
#define pn_flow_safe(fc) ((fc) >> 1)
|
||||
|
||||
/* Phonet pipe flow control states */
|
||||
enum {
|
||||
PEP_IND_EMPTY,
|
||||
PEP_IND_BUSY,
|
||||
PEP_IND_READY,
|
||||
};
|
||||
|
||||
#endif
|
119
include/net/phonet/phonet.h
Normal file
119
include/net/phonet/phonet.h
Normal file
|
@ -0,0 +1,119 @@
|
|||
/*
|
||||
* File: af_phonet.h
|
||||
*
|
||||
* Phonet sockets kernel definitions
|
||||
*
|
||||
* Copyright (C) 2008 Nokia Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* 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 St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef AF_PHONET_H
|
||||
#define AF_PHONET_H
|
||||
|
||||
/*
|
||||
* The lower layers may not require more space, ever. Make sure it's
|
||||
* enough.
|
||||
*/
|
||||
#define MAX_PHONET_HEADER (8 + MAX_HEADER)
|
||||
|
||||
/*
|
||||
* Every Phonet* socket has this structure first in its
|
||||
* protocol-specific structure under name c.
|
||||
*/
|
||||
struct pn_sock {
|
||||
struct sock sk;
|
||||
u16 sobject;
|
||||
u16 dobject;
|
||||
u8 resource;
|
||||
};
|
||||
|
||||
static inline struct pn_sock *pn_sk(struct sock *sk)
|
||||
{
|
||||
return (struct pn_sock *)sk;
|
||||
}
|
||||
|
||||
extern const struct proto_ops phonet_dgram_ops;
|
||||
|
||||
void pn_sock_init(void);
|
||||
struct sock *pn_find_sock_by_sa(struct net *net, const struct sockaddr_pn *sa);
|
||||
void pn_deliver_sock_broadcast(struct net *net, struct sk_buff *skb);
|
||||
void phonet_get_local_port_range(int *min, int *max);
|
||||
void pn_sock_hash(struct sock *sk);
|
||||
void pn_sock_unhash(struct sock *sk);
|
||||
int pn_sock_get_port(struct sock *sk, unsigned short sport);
|
||||
|
||||
struct sock *pn_find_sock_by_res(struct net *net, u8 res);
|
||||
int pn_sock_bind_res(struct sock *sock, u8 res);
|
||||
int pn_sock_unbind_res(struct sock *sk, u8 res);
|
||||
void pn_sock_unbind_all_res(struct sock *sk);
|
||||
|
||||
int pn_skb_send(struct sock *sk, struct sk_buff *skb,
|
||||
const struct sockaddr_pn *target);
|
||||
|
||||
static inline struct phonethdr *pn_hdr(struct sk_buff *skb)
|
||||
{
|
||||
return (struct phonethdr *)skb_network_header(skb);
|
||||
}
|
||||
|
||||
static inline struct phonetmsg *pn_msg(struct sk_buff *skb)
|
||||
{
|
||||
return (struct phonetmsg *)skb_transport_header(skb);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the other party's sockaddr from received skb. The skb begins
|
||||
* with a Phonet header.
|
||||
*/
|
||||
static inline
|
||||
void pn_skb_get_src_sockaddr(struct sk_buff *skb, struct sockaddr_pn *sa)
|
||||
{
|
||||
struct phonethdr *ph = pn_hdr(skb);
|
||||
u16 obj = pn_object(ph->pn_sdev, ph->pn_sobj);
|
||||
|
||||
sa->spn_family = AF_PHONET;
|
||||
pn_sockaddr_set_object(sa, obj);
|
||||
pn_sockaddr_set_resource(sa, ph->pn_res);
|
||||
memset(sa->spn_zero, 0, sizeof(sa->spn_zero));
|
||||
}
|
||||
|
||||
static inline
|
||||
void pn_skb_get_dst_sockaddr(struct sk_buff *skb, struct sockaddr_pn *sa)
|
||||
{
|
||||
struct phonethdr *ph = pn_hdr(skb);
|
||||
u16 obj = pn_object(ph->pn_rdev, ph->pn_robj);
|
||||
|
||||
sa->spn_family = AF_PHONET;
|
||||
pn_sockaddr_set_object(sa, obj);
|
||||
pn_sockaddr_set_resource(sa, ph->pn_res);
|
||||
memset(sa->spn_zero, 0, sizeof(sa->spn_zero));
|
||||
}
|
||||
|
||||
/* Protocols in Phonet protocol family. */
|
||||
struct phonet_protocol {
|
||||
const struct proto_ops *ops;
|
||||
struct proto *prot;
|
||||
int sock_type;
|
||||
};
|
||||
|
||||
int phonet_proto_register(unsigned int protocol, struct phonet_protocol *pp);
|
||||
void phonet_proto_unregister(unsigned int protocol, struct phonet_protocol *pp);
|
||||
|
||||
int phonet_sysctl_init(void);
|
||||
void phonet_sysctl_exit(void);
|
||||
int isi_register(void);
|
||||
void isi_unregister(void);
|
||||
|
||||
#endif
|
62
include/net/phonet/pn_dev.h
Normal file
62
include/net/phonet/pn_dev.h
Normal file
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
* File: pn_dev.h
|
||||
*
|
||||
* Phonet network device
|
||||
*
|
||||
* Copyright (C) 2008 Nokia Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* 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 St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef PN_DEV_H
|
||||
#define PN_DEV_H
|
||||
|
||||
struct phonet_device_list {
|
||||
struct list_head list;
|
||||
struct mutex lock;
|
||||
};
|
||||
|
||||
struct phonet_device_list *phonet_device_list(struct net *net);
|
||||
|
||||
struct phonet_device {
|
||||
struct list_head list;
|
||||
struct net_device *netdev;
|
||||
DECLARE_BITMAP(addrs, 64);
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
int phonet_device_init(void);
|
||||
void phonet_device_exit(void);
|
||||
int phonet_netlink_register(void);
|
||||
struct net_device *phonet_device_get(struct net *net);
|
||||
|
||||
int phonet_address_add(struct net_device *dev, u8 addr);
|
||||
int phonet_address_del(struct net_device *dev, u8 addr);
|
||||
u8 phonet_address_get(struct net_device *dev, u8 addr);
|
||||
int phonet_address_lookup(struct net *net, u8 addr);
|
||||
void phonet_address_notify(int event, struct net_device *dev, u8 addr);
|
||||
|
||||
int phonet_route_add(struct net_device *dev, u8 daddr);
|
||||
int phonet_route_del(struct net_device *dev, u8 daddr);
|
||||
void rtm_phonet_notify(int event, struct net_device *dev, u8 dst);
|
||||
struct net_device *phonet_route_get_rcu(struct net *net, u8 daddr);
|
||||
struct net_device *phonet_route_output(struct net *net, u8 daddr);
|
||||
|
||||
#define PN_NO_ADDR 0xff
|
||||
|
||||
extern const struct file_operations pn_sock_seq_fops;
|
||||
extern const struct file_operations pn_res_seq_fops;
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue